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

And*_*eas 5 validation asp.net-mvc jquery partial-views dynamic

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

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

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

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

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

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


我尝试过的:

我试着把这个放在帖子之前:

if($('form').validate().form()){
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

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

添加

Sys.Mvc.FormContext._Application_Load(); 
Run Code Online (Sandbox Code Playgroud)

部分加载后..并将帖子的数据类型设置为"html".都没有奏效.

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

这种技术组合是我认为很常见的东西,为什么它很难让它起作用?任何帮助都非常感谢.谢谢

m0s*_*0sa 14

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

// insert new form into the DOM first, then call:
$.validator.unobtrusive.parse('<form selector>'));
$('<form selector>').validate(); // start validating
Run Code Online (Sandbox Code Playgroud)

这根据表单子元素中的data-xxx属性设置jquery.validation验证器.

之后,呼叫$('<form selector>').validate().form() 应按预期工作!