我的模特:
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属性问题?
答案 0 :(得分:4)
如果我已正确理解您的问题,那么在使用不正确的Attempts
发回表单后,PIN
没有增加问题。如果该假设是正确的,那么由于ModelState的工作方式,您遇到了这个问题。
问题的简短答案就是从您的行动中致电ModelState.Remove:
[HttpPost]
public ActionResult YourAction(VerifyModel model)
{
ModelState.Remove("Attempts");
model.Attempts++;
return View(model);
}
如果您想详细说明原因,请参阅ASP.NET MVC’s Html Helpers Render the Wrong Value!。摘录:
为什么?
ASP.NET MVC假设如果您在回复HTTP POST时呈现View,并且您正在使用Html Helpers,那么您最有可能重新显示验证失败的表单。因此,Html Helpers实际上在ModelState中检查要在模型中查看之前在字段中显示的值。这使他们能够重新显示用户输入的错误数据,并在需要时显示匹配的错误消息。