0

綁定的客戶端驗證我的Ajax表單在MVC 3新增表單元素沒有得到在MVC 3

在索引視圖:

<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代碼: 我只是在master頁面引用這個文件。當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"); 

我第一次加載我的頁面時,我的客戶端驗證正常工作。但是,一旦我成功提交我的表單並嘗試再次提交我的表單。我的客戶端驗證不起作用,我的表單驗證了它的服務器端。

我想在添加新元素或重新渲染局部視圖後再次綁定我的客戶端驗證。

另外,一旦提交成功,應如何清除表單值。

感謝,

回答

1

你可以訂閱OnSuccess方法在AjaxOptions並重新使用$.validator.unobtrusive.parse法新添加元素的客戶端驗證:

function OnSuccess(result) { 
    $('form').removeData('validator'); 
    $('form').removeData('unobtrusiveValidation'); 
    $.validator.unobtrusive.parse('form'); 
} 
+0

感謝達林。重新呈現局部視圖後,客戶端驗證將起作用。乾杯 – jNet