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