动态局部视图+ jquery表单劫持+客户端validation=无法正常工作

我正在使用MVC 3与不引人注目的javascript进行客户端validation。

我有一个可以点击的行的表。 单击时,我想调出一个动态加载的局部视图。 这是代码:

function GetStuff(id) { $.ajax( { url: "Edit/" + id, success: function (result) { $("#DivTest").html(result); } }); } 

这一切都有效。 问题是当我尝试使用jquery在partial中保存某些东西时。 表单被劫持,如下所示:

 $(function () { $.post($(this).attr("action"), $(this).serialize(), function (data) { alert("test"); }); e.preventDefault(); }); 

这一切使得客户端validation不起作用。 即使我遗漏了一些必要的值,它也会发布post。 如果我没有使用ajax发布或者如果部分加载在页面加载(非动态)上,这一切都有效。


我尝试过的:

我试着把它放在post之前:

 if($('form').validate().form()){ ... } 

这只是每次都返回真实..

从这篇文章我得到2个建议ASP.NET MVC 2使用jQuery加载局部视图 – 没有客户端validation

添加

 Sys.Mvc.FormContext._Application_Load(); 

部分加载后..并将post的数据类型设置为“html”。 都没有奏效。

我也没试过这个方法: http : //www.deepcode.co.uk/2010/08/mvc-ootb-validation-when-pulling-in.html

这种技术的组合是我认为非常普遍的,为什么它很难使它工作? 任何帮助都非常感谢。 谢谢

在成功加载新表单的ajax后,您必须通过手动调用来指示不显眼的validation库解析新表单:

 // insert new form into the DOM first, then call: $.validator.unobtrusive.parse('
')); $('
').validate(); // start validating

这将根据表单子元素中的data-xxx属性设置jquery.validationvalidation器。

之后调用$('

').validate().form()

应该按预期工作!

你为什么试图劫持部分forms? 我认为,因为你劫持forms不引人注目的现场活动没有解雇,这就是为什么你没有得到validation错误。

您是否尝试过使用Ajax表单? (Ajax.BeginForm(...))

如果您引入部分ajax表单,则应具有validation所需的所有信息。 提交表单后,您可以指定要运行的javascript函数。

好吧最后我明白了。 问题出在那里,不管我是否喜欢表单或者我使用的是Ajax.BeginForm(…),没有区别。 如果我没有动态加载部分,它总是有效。

解决方案?

将jquery.validate.unobtrusive.min.js添加到局部视图。 这可能是一个新手的错误,只将它添加到父视图或母版页,但如果这有助于某人我很乐意承认我的错误:)这是这个js文件,使客户端validation工作,它当然必须每次加载部分(在其中有客户端validation)时调用。