如何使用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的示例