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每次都需要加载某些原因.我不知道为什么.
像这样的东西应该做的伎俩:
$("#my-button").click(function (event) {
event.preventDefault();
$("#my-form").validate();
if ($("#my-form").valid()) {
// ...
}
});
Run Code Online (Sandbox Code Playgroud)
问题可能是由于在最初加载不显眼的脚本之后将元素添加到DOM.您可以$.validator.unobtrusive.parse("form")
在创建对话框后通过调用强制它将验证处理程序附加到新元素.
$("<div></div>").dialog(...)
$.validator.unobtrusive.parse("form")
Run Code Online (Sandbox Code Playgroud)
这解决了我们类似的问题,尽管我们在对话框中显示表单.