如何使用asp.net mvc 3 jquery验证与jjery对话框提交ajax?

cho*_*bo2 6 asp.net-mvc jquery unobtrusive-javascript jquery-validate asp.net-mvc-3

我在用

asp.net mvc 3 jquery验证无阻碍的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);

                        }
                    }
            });
Run Code Online (Sandbox Code Playgroud)

这总是回归真实.

编辑2

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

所以这意味着我确实拥有脚本和所有内容,但是当我尝试以编程方式执行时,它不能用于未知原因.

编辑3

我在主页面中粘贴了jquery validate && jquery.validate.unobtrusive文件.但是,当我将它们粘贴在包含已加载的字段的局部视图中,然后强制提交时,验证就会启动.

我不明白.我非常确定路径是正确的,因为我只是将文件拖放到我的母版页中,它找到了路径.在部分视图中使用它并不是真正的解决方案,因为我必须多次执行此操作,这意味着每次部分视图加载时我都会获得这些文件的另一个副本.

编辑4

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

Mat*_*eer 9

像这样的东西应该做的伎俩:

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

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

        if ($("#my-form").valid()) {
            // ...
        }
    });
Run Code Online (Sandbox Code Playgroud)


Cla*_*lay 7

问题可能是由于在最初加载不显眼的脚本之后将元素添加到DOM.您可以$.validator.unobtrusive.parse("form")在创建对话框后通过调用强制它将验证处理程序附加到新元素.

$("<div></div>").dialog(...)
$.validator.unobtrusive.parse("form")
Run Code Online (Sandbox Code Playgroud)

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