0

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");

最初にページを読み込んだとき、クライアント側の検証は正常に機能します。ただし、フォームを正常に送信したら、もう一度フォームを送信してみてください。クライアント側の検証が機能せず、フォームがサーバー側で検証します。

新しい要素を追加した後、または部分ビューを再レンダリングした後、クライアント側の検証を再度バインドしたいと思います。

また、送信に成功したら、フォームの値をクリアするにはどうすればよいですか。

ありがとう、

4

1 に答える 1

1

のメソッドをサブスクライブし、OnSuccessメソッドAjaxOptionsを使用して、新しく追加された要素のクライアント側の検証を再アタッチできます$.validator.unobtrusive.parse

function OnSuccess(result) {
    $('form').removeData('validator');
    $('form').removeData('unobtrusiveValidation');
    $.validator.unobtrusive.parse('form');
}
于 2012-11-02T07:02:30.520 に答える