Donc, j'ai une classe de modèle User
. Il a la liste de UnitViewModel
.MVC ModelState Validation de la liste des propriétés complexes
public class UserViewModel
{
[Required(ErrorMessage="FirstName")]
public string FirstName { get; set; }
[Required(ErrorMessage = "LastName")]
public string LastName { get; set; }
public List<UnitViewModel> DesiredUnits { get; set; }
}
public class UnitViewModel
{
public Guid? UnitID { get; set; }
[Required(ErrorMessage = "NAMEEE")]
public string Name { get; set; }
public bool Selected { get; set; }
}
Lorsque je tente de créer un nouveau User
je poste UserViewModel
de mon point de vue. Ici, je reçois ModelState.IsValid
false
. Cela se produit parce que la validation vérifie également la propriété UnitViewModel.Name
qui est null (et il est normal que je crée User
et que j'ai la liste checkbox
pour UnitViewModel
. L'utilisateur sélectionne UnitViewModel
de la liste existante UnitViewModel
).
Je pourrais le réparer d'une manière horrible de ModelState["DesiredUnits[0].UnitID"].Errors.Clear()
par boucle foreach mais je ne le ferai pas.
Alors, quelle serait la solution? Comment puis-je désactiver la validation de la liste des propriétés complexes d'un modèle?
MISE À JOUR
Une autre solution, je suis actuellement en utilisant, est d'avoir HiddenFor(m=>m.Name)
dans le modèle de l'éditeur de UnitViewModel
mais inconvénient de cette approche est que Name
est inutile quand je l'ai déjà étiquette editortemplate. De plus, si j'avais d'autres champs obligatoires, je devrais avoir une entrée cachée correspondante pour chacun d'entre eux.
pouvez-vous rendre votre vue de création d'une manière que vous n'avez aucun champ qui lient la propriété de DesiredUnits? Thant way La liste de UnitViewModel resterait vide et aucune validation de Name n'est faite –
J'ai 'EditorTemplate' pour' DesiredUnits' qui a 'UnitID' et' Name'. Et lors de la création 'User' je dois le montrer puisqu'ils doivent choisir les unités désirées – levi
essayez d'utiliser un DesiredUnits Nullable alors – maztt