4

我的模型:

    public class VerifyModel
    {
        public string PIN { get; set; }
        public int Attempts { get; set; }
    }

我的观点:

    @Html.HiddenFor(m => m.PIN)
    @Html.HiddenFor(m => m.Attempts)

在进入视图时,我检查Model.PIN并且Model.Attempts它们包含从控制器传递的正确值,其中Attempts非零。然而,呈现的 Html 是:

<input id="PIN" name="PIN" type="hidden" value="xxxx" />
<input data-val="true" value="0"  data-val-number="The field Attempts must be a number." data-val-required="The Attempts field is required." id="Attempts" name="Attempts" type="hidden"/>

Attempts 的值始终为 0!而且我没有在任何地方指定该Attempts字段是强制性的。

如何解决模型中的 int 属性问题?

4

1 回答 1

5

如果我正确理解了您的问题,那么在Attempts表单以不正确的PIN. 如果该假设是正确的,那么由于 ModelState 的工作方式,您会遇到此问题。

对这个问题的简短回答就是从您的操作中调用ModelState.Remove

[HttpPost]
public ActionResult YourAction(VerifyModel model)
{
    ModelState.Remove("Attempts");  
    model.Attempts++;  

    return View(model);
}

如果您想完整解释为什么会这样,请参阅ASP.NET MVC 的 Html Helpers Render the Wrong Value!. 摘抄:

为什么?

ASP.NET MVC 假定如果您正在呈现一个视图以响应 HTTP POST,并且您正在使用 Html 帮助程序,那么您很可能正在重新显示一个验证失败的表单。因此,Html Helpers 在查看 Model 之前实际上会在 ModelState 中检查要在字段中显示的值。这使他们能够重新显示用户输入的错误数据,并在需要时显示匹配的错误消息。

于 2013-09-25T15:31:38.140 回答