我在使用 MVC RC2 时遇到问题,在验证失败时,当视图传回给用户时,失败的字段将引发 NullReferenceException。
找到了一个短期解决方案:将 Html.ValidationMessage 重命名为与目标表单字段不同。这行得通!
但是现在自动突出显示与输入字段断开连接。(开箱即用的行为是更改目标字段的 CSS 类,使其脱颖而出)
所以...
我的代码的实际问题是什么?以及为什么不允许我的 ValidationMessage 和 Form 字段共享相同的名称 ?
运行以下代码时,代码会抛出 NullReferenceException:
查看代码
<% using (Html.BeginForm()) { %>
<fieldset>
<h5>Terms and Conditions</h5>
<p>
<%= Html.CheckBox("Terms", false)%>
<%= Html.ValidationMessage("Terms")%>
I agree to the <a href="/signup/terms">Terms & Conditions.</a>
</p>
</fieldset>
<input class="signup_button" type="submit" title="Sign Up" value="" />
<% } %>
<%= Html.ValidationSummary("Sign up wasn't successful.")%>
控制器代码
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection form)
{
bool Terms = form["Terms"].ToString() == "true,false" ? true : false;
if (Terms)
{
return RedirectToAction("Success", "Signup");
}
else
{
ModelState.AddModelError("Terms", "Please agree to the Terms");
ModelState.AddModelError("_FORM", "Terms not checked");
}
return View();
}
如果我省略以下内容,我可以让代码工作:
ModelState.AddModelError("Terms", "Please agree to the Terms");
但是有了这个,复选框会抛出 Null 引用异常。
有任何想法吗?