MVC3にAJAXフォームがあります。
インデックスビューの場合:
<div id="ajaxcontactform">
<% Html.RenderPartial("ContactForm", Model); %>
</div>
ContactFormパーシャルビューのAJAXフォーム
<% using (Ajax.BeginForm("Contact", new AjaxOptions()
{
UpdateTargetId = "ajaxcontactform",
OnBegin = "ShowProcessing",
OnComplete = "HideProessing",
InsertionMode = InsertionMode.Replace
}))
{%>
<%: Html.ValidationSummary()%>
<%: Html.TextBoxFor(m => m.Name, new { Class = "contacttextform" })%>
<%}%>
私のコントローラー:
[HttpPost]
public ActionResult Contact(ContactForm form)
{
if (Request.IsAjaxRequest())
{
// on error
if (!ModelState.IsValid)
return PartialView("ContactForm", form);
// TODO: My data processing code here
// return partial view on success
return PartialView("ContactForm", new ContactFormModel());
}
}
クライアント側のカスタム検証JavaScriptコード:マスターページでこのファイルを参照しました。このコードは、DOMが1回ロード/作成されるときに1回実行されます。
$.validator.addMethod("phonenumber", function (value, element, params) {
if (!value)
return true;
var regex = /^[\s\d\+\(\)]+$/;
return regex.test(value);
});
jQuery.validator.unobtrusive.adapters.addBool("phonenumber");
最初にページを読み込んだとき、クライアント側の検証は正常に機能します。ただし、フォームを正常に送信したら、もう一度フォームを送信してみてください。クライアント側の検証が機能せず、フォームがサーバー側で検証します。
新しい要素を追加した後、または部分ビューを再レンダリングした後、クライアント側の検証を再度バインドしたいと思います。
また、送信に成功したら、フォームの値をクリアするにはどうすればよいですか。
ありがとう、