2

這裏是我的問題,動態創建...元素沒有被驗證的W/AJAX後不顯眼的驗證和使用MVC 3和jQuery

我最初呈現和顯示用Ajax.BeginForm AJAX的形式創建了一個頁面。輸入一些標準併發布AJAX表單。返回的部分視圖包含使用Html.BeginForm創建的HTML表單。

到目前爲止這麼好...這一點的一切工作正常。我的不顯眼的客戶端驗證對從部分視圖創建的元素非常有效。當我現在嘗試創建一些動態輸入元素(通過jQuery)並將它們插入/追加到由局部視圖創建的表單中時,我的問題就會發生。我無法在我的動態創建的元素上進行任何不顯眼的客戶端驗證。

我嘗試過: - 克隆現有元素,修改它們的ID /名稱並將它們附加到DOM中。 - 創建html字符串並將它們插入到DOM中。

動態元素的每個插入我曾嘗試調用後: - $ .validator.unobtrusive.parseElement()[新元件] - $ .validator.unobtrusive.parse()[新的容器中,文檔等] - $ .validator.unobtrusive.parseDynamicContent()[插件]

這裏是jQuery代碼的詳細信息...

$("#insert").live("click", function() { 
    var html = "<input type='text' value='' name='CustomerNominationVolume' id='CustomerNominationVolume' data-val-required='The Nomination (Dth) field is required.' data-val-number='The field Nomination (Dth) must be a number.' data-val='true' /><br />" 
    html += "<span class='field-validation-valid' data-valmsg-replace='true' data-valmsg-for='CustomerNominationVolume'></span>"; 
    $("#new").html(html); 
}); 

$("#parse").live("click", function() { 
    $.validator.unobtrusive.parse(document); 
}); 

$("#validate").live("click", function() { 
    var element = $("#CustomerNominationVolume"); 
    var form = $(element).first().closest('form'); 
    form.validate().element(element); 
}); 

任何幫助,將不勝感激!

編輯: 做一些額外的研究和測試,我又回到了這個solution以確定爲什麼它不是爲我工作後。事實證明,我正在插入屬於列表一部分的新輸入元素。因此,我的新元素的名稱看起來與此類似:something [0] .id,something [1] .id等...

這些名稱導致$ .validator.unobtrusive.parseDynamicContent()函數在這一行失敗: $('[name ='+ elname +']')。rules(「add」,args);

我只是將其更改爲 $(「[name ='」+ elname +「'」「)。rules(」add「,args);

一切現在工作正常...

+0

可能的重複[麻煩越來越不引人注意的驗證使用mvc 3在jquery ajax後](http://stackoverflow.com/questions/7005052/trouble-getting-unobtrusive-validation-working-with-mvc-3-on -jquery-ajax-post) – jgauffin 2011-08-13 09:13:21

+0

另一種可能的重複:http://stackoverflow.com/questions/6812779/mvc-3-razor-load-partial-with-validation – jgauffin 2011-08-13 09:16:49

回答

12

一旦你添加動態內容,然後調用:

$("form").removeData("validator"); 
    $("form").removeData("unobtrusiveValidation"); 
    $.validator.unobtrusive.parse("form"); 

其中,「$(‘形式’)」是一個選擇爲您的表單。

這應該做的伎倆。

+0

非常感謝你的回答!它保存了我的假期:D – 2013-08-18 07:41:02

+0

很酷......這對我有用...... – akjha627 2014-05-09 16:35:02

+0

根據Brad Wilson的說法,你只需要解析新的內容:「爲了解析新的HTML,你可以調用jQuery.validator.unobtrusive.parse ()方法,爲它傳遞一個你想要解析的HTML選擇器,你也可以調用jQuery.validator。unobtrusive.parseElement()函數來解析單個HTML元素。「http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html – ps2goat 2014-08-07 22:06:49