Actualiser ModelState pour supprimer les erreurs
De l'actualisation de la ModelState
Salut, j'ai une question à propos de la ModelState dans un ASP.NET MVC contrôleur.
Lorsque l'utilisateur sélectionne une option à partir de l'affichage, de la date de début et date de fin pour la "certification" sera définie sur la base des autres dates entrées.
Le problème, c'est la certification des dates de revenir comme nulle et notre CertificationMetaData classe specifys les champs [Obligatoire] de sorte que le ModelState est pas valide dès que l'action des charges.
Retrait de la ModelSate manuelle des erreurs permet que cela fonctionne, mais je me demandais si il ya une meilleure façon de le faire? Est-il possible d'actualiser la ModelState? Dois-je faire le champs n'est pas nécessaire? Ou dois-je ajouter une date de valeur à partir de la vue avec le javascript?
public ActionResult Create(FormCollection fc, Certification certification, Absence absence)
{
if (certification.CertificationTypeID == 1)
{
certification.CertificationStartDate = absence.StartDate;
certification.CertificationEndDate = absence.StartDate.AddDays(7);
this.ModelState.Remove("CertificationStartDate");
this.ModelState.Remove("CertificationEndDate");
}
if (this.ModelState.IsValid)
{
//save
return RedirectToAction("Index");
}
return View();
}
Aussi comme vous pouvez le voir, j'ai codé en dur la valeur de l'ID pour la certification de type. Quelle est la meilleure façon de comparer les valeurs avec la liste de choix des valeurs de la table? Est un enum la meilleure façon de le faire?
Grâce
source d'informationauteur HermanTheSheep
Vous devez vous connecter pour publier un commentaire.
Évidemment, cela est une chose personnelle, mais je ne voudrais pas supprimer les messages d'erreur.
Si j'allais pour la solution simple, puis je voudrais supprimer l'attribut [Obligatoire] et d'ajouter un code de validation par le contrôleur pour ajouter l'erreur, si les dates étaient manquantes ou à la valeur de remplacement si c'était le bon type.
Si j'allais pour les plus complexes de la solution je mettrais la validation au niveau du Modèle. Éventuellement une classe de base ou de l'interface et que le modèle doit mettre en œuvre. Un ValidationHelper classe statique Valider(IValidate objet) méthode qui vous permettra d'inspecter les ValidationAttributes et appelle une méthode de validation du Modèle. Il serait alors renvoyer une collection de ValidationErrors. Personnalisé ModelBinder serait écrite qui comprend la validation du Modèle et des cartes ces de ModelState erreurs.
L'approche suivante actualise le modèle de l'état et permet de garder votre conception d'un modèle cohérent avec les attributs [obligatoire] etc.
Dans mon cas, je veux que mon modèle à avoir un champ obligatoire que la normale niveau des utilisateurs à l'aide d'une API ne peut pas changer, j'ai donc fait ceci:
De cette façon, vous n'avez pas besoin de retirer votre champs requis, et vous aussi n'avez pas besoin de fournir une date en javascript.