0

我在 MVC 3 中有 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 加载/创建一次时运行一次。

    $.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 回答