如何使用asp.net mvc 3 jqueryvalidation与jjery对话框进行ajax提交?
我在用
asp.net mvc 3 jqueryvalidation无阻碍的javascript。
我试图通过注释在服务器端编写所有validation,然后使用mvc 3的新function来处理客户端。
我有一个对话框,上面有一个按钮(只是一个按钮而不是提交按钮),我想通过ajax将数据发布到服务器。
因此,当用户点击按钮时,我会执行表单提交并返回false以取消回发。
我认为这会触发validation但似乎并非如此。 如何进行客户端validation触发器?
编辑
var $dialog = $('').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); } } });
这总是回归真实。
编辑2
如果我在表单中放置一个提交按钮,它将显示客户端validation(我使用jquery返回false,如我的代码所示)。
所以这意味着我确实拥有脚本和所有内容,但是当我尝试以编程方式执行时,它不能用于未知原因。
编辑3
我在主页面中粘贴了jquery validate && jquery.validate.unobtrusive文件。 但是当我将它们粘贴在包含要加载的字段的局部视图中,然后强制提交时,validation就会启动。
我不明白。 我非常确定路径是正确的,因为我只是将文件拖放到我的母版页中,它就找到了路径。 在部分视图中使用它并不是真正的解决方案,因为我必须多次执行此操作,这意味着每次部分视图加载时我都会获得这些文件的另一个副本。
编辑4
我认为只是jquery.validate.unobtrusive每次都需要加载某些原因。 我不知道为什么。
像这样的东西应该做的伎俩:
$("#my-button").click(function (event) { event.preventDefault(); $("#my-form").validate(); if ($("#my-form").valid()) { // ... } });
问题可能是由于在最初加载不显眼的脚本后将元素添加到DOM。 您可以在创建对话框后通过调用$.validator.unobtrusive.parse("form")
强制它将validation处理程序附加到新元素。
$("").dialog(...) $.validator.unobtrusive.parse("form")
这解决了我们类似的问题,尽管我们在对话框中显示表单。
$("#my-button").click(function (event) { event.preventDefault(); $.validator.unobtrusive.parse("#my-form"); if ($("#my-form").valid()) { // ... } });
这可以使用ASP.NET MVC的一项称为Remote Validation
的function来完成。 您所要做的就是使用[Remote]
属性修饰您想要validation的属性,该属性传递执行validation的方法的名称和存在它的控制器。
您可以找到有关如何:在ASP.NET MVC中实现远程validation的示例