如何将asp.net mvc 3 jquery validate与ajax提交的jquery对话框一起使用?

如何将asp.net mvc 3 jquery validate与ajax提交的jquery对话框一起使用?,jquery,asp.net-mvc,asp.net-mvc-3,jquery-validate,unobtrusive-javascript,Jquery,Asp.net Mvc,Asp.net Mvc 3,Jquery Validate,Unobtrusive Javascript,我正在使用 asp.NETMVC3 验证插件 通畅的javascript 我试图通过注释在服务器端编写所有验证,然后让mvc 3的新功能处理客户端 我有一个对话框,上面有一个按钮(只是一个按钮而不是提交按钮),我想通过ajax将数据发布到服务器 因此,当用户单击按钮时,我执行表单提交并返回false以取消发回 我以为这会引发验证,但事实似乎并非如此。如何创建客户端验证触发器 编辑 <form method="post" id="TaskFrm" action="/Controller/Ac

我正在使用

asp.NETMVC3 验证插件 通畅的javascript

我试图通过注释在服务器端编写所有验证,然后让mvc 3的新功能处理客户端

我有一个对话框,上面有一个按钮(只是一个按钮而不是提交按钮),我想通过ajax将数据发布到服务器

因此,当用户单击按钮时,我执行表单提交并返回false以取消发回

我以为这会引发验证,但事实似乎并非如此。如何创建客户端验证触发器

编辑

<form method="post" id="TaskFrm" action="/Controller/Action">

            <input type="text" value="" name="Name" id="Name" data-val-required="Name field cannot be left blank" data-val-length-max="100" data-val-length="task cannot exceed 100 characters" data-val="true">
</form>

var $dialog = $('<div></div>').dialog(
            {
                width: 580,
                height: 410,
                resizable: false,
                modal: true,
                autoOpen: false,
                title: 'Basic Dialog',
                buttons:
                    {
                        Cancel: function ()
                        {
                            $(this).dialog('close');
                        },
                        'Create Task': function ()
                        {
                            var createSubmitFrmHandler = $(my.selectors.createFrm).live('submit', function ()
                            {
                                alert('hi');
                                return false;
                            });

                            createSubmitFrmHandler .validate();
                            var a = createSubmitFrmHandler .valid();

                            alert(a);

                        }
                    }
            });

变量$dialog=$('').dialog(
{
宽度:580,
身高:410,
可调整大小:false,
莫代尔:是的,
自动打开:错误,
标题:“基本对话框”,
按钮:
{
取消:函数()
{
$(this.dialog('close');
},
“创建任务”:函数()
{
var createSubmitFrmHandler=$(my.selectors.createFrm.live('submit',function()
{
警报(“hi”);
返回false;
});
createSubmitFrmHandler.validate();
var a=createSubmitFrmHandler.valid();
警报(a);
}
}
});
这总是正确的

编辑2

如果我在表单中放置submit按钮,它将显示客户端验证(我使用jquery返回false,如代码中所示)

这意味着我确实有脚本和所有东西,但当我尝试编程时,由于未知的原因它无法工作

编辑3

我在母版页中粘贴了jquery validate&&jquery.validate.unobtrusive文件。但当我将它们粘贴到包含加载字段的局部视图中,然后强制提交时,验证就开始了

我不明白。我非常确定路径是正确的,因为我只是将文件拖放到我的母版页中,它找到了路径。在局部视图中使用它并不是一个真正的解决方案,因为我需要多次这样做,这意味着每次加载局部视图时,我都会得到这些文件的另一个副本

编辑4


我认为每次都需要加载jquery.validate.unobtrusive,因为某些原因。但是我不知道为什么。

像这样的东西应该可以做到:

    $("#my-button").click(function (event) {
        event.preventDefault();

        $("#my-form").validate();

        if ($("#my-form").valid()) {
            // ...
        }
    });

这可以使用ASP.NET MVC的一个名为
远程验证的功能来完成。您所要做的就是用一个
[Remote]
属性来修饰您想要验证的属性,该属性传递进行验证的方法的名称以及它所在的控制器

你可以找到一个关于如何

问题可能是由于在最初加载不引人注目的脚本后将元素添加到DOM中。创建对话框后,可以通过调用
$.validator.unobtrusive.parse(“form”)
强制它将验证处理程序附加到新元素

$("<div></div>").dialog(...)
$.validator.unobtrusive.parse("form")
$(“”)。对话框(…)
$.validator.unobtrusive.parse(“表单”)

这解决了我们类似的问题,尽管我们在对话框中显示了表单。

我认为这也可以解决问题,但我得到了答案。与@chobo2相同的问题。我真的回来了。。。缺少什么?我知道远程验证,但我认为这不是我需要的。我的意思是我正在检查字段是否为空。我想我不需要为此向服务器查询。如果我在找重复的名字或什么的话,那是的。但不仅仅是空白字段。好的,对不起,只是你的问题有点模棱两可。点击提交后再点击创建这对我来说很有效(我们用javascript导入了一个表单,需要在提交时对其进行验证)。这正是发生的事情!非常感谢,我花了一周的时间才弄明白为什么我的表单返回有效,即使没有内容,并且属性在模型中被设置为“必需”
$("<div></div>").dialog(...)
$.validator.unobtrusive.parse("form")