Question

Bonne journée!

ASP.NET MVC fait du bon travail en stockant les valeurs des entrées pendant le cycle GET/POST à ​​l'intérieur ModelState et les mettre automatiquement en entrées en cas d'erreurs de validation.

Mais sur mon formulaire j'ai un champ CAPTCHA qui ne doit pas être conservé lors des erreurs de validation (la valeur CAPTCHA est régénérée à chaque requête).

J'ai essayé d'y parvenir en définissant

if (TryUpdateModel(model))
{
    // ...
}
else
{
    ModelState.Remove("CaptchaValue"); // ModelState does have CaptchaValue 
    return View(model); // CaptchaValue is empty in model
}

Mais ça ne marche pas.

Peut-être existe-t-il un attribut que je peux appliquer à mon champ de modèle pour l'empêcher d'être conservé dans ModelState ?

Merci d'avance!

Était-ce utile?

La solution 2

J'ai trouvé ça dans un fil de discussion voisin MVC - Comment changer la valeur d'une zone de texte dans un article ?:

ModelState.SetModelValue("CaptchaValue", new ValueProviderResult(String.Empty, String.Empty, System.Threading.Thread.CurrentThread.CurrentCulture));

Mais ça a l'air d'être un peu moche.

Autres conseils

Vous pouvez utiliser l'attribut bind sur le paramètre action pour contrôler le comportement de liaison du modèle :

public ActionResult YourActionName([Bind(Exclude = "CaptchaValue")]ModelType model)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top