将jQueryvalidation器规则添加到ASP中动态创建的元素

我在MVC3项目的页面上有一些动态插入的表单字段。 通常我们会添加jQueryvalidation服务器端,但在这种情况下我们不能(UI中的多个字段生成一个隐藏字段的值 – 这就是提交的内容。我们无法validation隐藏字段,所以我们必须为用户可以看到的字段添加仅UIvalidation)

将字段动态添加到页面后,我在容器上运行以下代码:

$container.find(".date").rules("add", { required: true, messages: { required: "The date is required" } }); 

但它不起作用! 奇怪的是,禁用上面的代码,创建动态元素,然后在浏览器JS控制台中运行代码,但只显示默认validation消息。

我很茫然。 有任何想法吗?

我正在使用jQuery Validation 1.9.0和不引人注目的插件

现在我已经了解了Unobtrusive插件方面的内容(我理解这与ASP.NET有关),这就是你需要做的:

添加新元素后,调用$.validator.unobtrusive.parseElement(newElement) ,它将被添加到表单中。 如您的答案所示,您需要在新表单元素中设置data-val和data-val-required属性。

所以你最终得到这个:

 //create new form element $('form fieldset').append('
New Field: '+ ''+ ' * Also required'); //add new rules to it $.validator.unobtrusive .parseElement($('form').find('input[name="newField"]').get(0));

如图所示: http : //jsfiddle.net/ryleyb/LNjtd/2/

事实certificate,这可以通过向每个表单元素添加一些属性来主要在HTML中完成:

  • name属性
  • data-val="true"
  • data-val-required="message"

像这样:

  

然后表单只需要通过JS重新解析:

 //Remove current form validation information $("form") .removeData("validator") .removeData("unobtrusiveValidation"); //Parse the form again $.validator .unobtrusive .parse("form"); 

我认为你有一些更简单的错误 – 比如你的find('.date')实际上并没有找到任何东西。 因为否则,你的代码对我来说看起来很合理。 以下是它按预期工作的示例: http : //jsfiddle.net/ryleyb/LNjtd/

我能够正确validation代码:

 $('form fieldset') .append('
New Field: * Also required') .find('input[name="newField"]').rules('add', { required: true, messages: { required: 'New field is required' } } );​