Domanda

Buona giornata!

ASP.NET MVC fa un buon lavoro memorizzando i valori degli input durante Get/Post Cycle all'interno ModelState e mettendoli in modo automobilistico in input in caso di errori di convalida.

Ma nella mia forma ho il campo CAPTCHA che non dovrebbe essere preservato durante gli errori di convalida (il valore Captcha viene rigenerato su ciascuna richiesta).

Ho provato a raggiungere questo obiettivo impostando

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

Ma non funziona.

Può essere un attributo che posso applicare al mio campo modello per impedirlo di preservare in ModelState?

Grazie in anticipo!

È stato utile?

Soluzione 2

L'ho trovato nel thread nelle vicinanze MVC - Come modificare il valore di una casella di testo in un post?:

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

Ma sembra essere un po 'brutto.

Altri suggerimenti

È possibile utilizzare l'attributo BIND sul parametro di azione per controllare il comportamento di legame del modello:

public ActionResult YourActionName([Bind(Exclude = "CaptchaValue")]ModelType model)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top