防止在ModelState中保留值

时间:2011-06-16 09:02:04

标签: asp.net asp.net-mvc modelstate modelstatedictionary

美好的一天!

ASP.NET MVC通过在ModelState内的GET / POST周期内存储输入值并在验证错误的情况下自动将它们放入输入中来做得很好。

但是在我的表单上我有CAPTCHA字段,在验证错误期间不应保留该字段(每个请求都会重新生成CAPTCHA值)。

我试图通过设置

来实现这一目标
if (TryUpdateModel(model))
{
    // ...
}
else
{
    ModelState.Remove("CaptchaValue"); // ModelState does have CaptchaValue 
    return View(model); // CaptchaValue is empty in model
}

但它不起作用。

可能有一个属性可以应用于我的模型字段以防止它在ModelState中保留吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用action参数的bind属性来控制模型绑定行为:

public ActionResult YourActionName([Bind(Exclude = "CaptchaValue")]ModelType model)

答案 1 :(得分:0)

我在附近的帖子MVC - How to change the value of a textbox in a post?中找到了这个:

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

但它看起来有点难看。