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 参照例外をスローします。
何か案は?