我正在使用MVC 3和不显眼的javascript进行客户端验证。
我有一个可以点击的行表。单击时,我想调出一个动态加载的局部视图。这是代码:
function GetStuff(id) {
$.ajax(
{
url: "Edit/" + id,
success: function (result) {
$("#DivTest").html(result);
}
});
}
这一切都有效。 问题是当我尝试使用jquery在partial中保存某些东西时。表格被劫持,如下:
$(function () {
$.post($(this).attr("action"),
$(this).serialize(),
function (data) {
alert("test");
});
e.preventDefault();
});
这一切使得客户端验证无法正常工作。即使我遗漏了一些必要的值,它也会发布帖子。如果我没有使用ajax发布或部分加载到页面加载(非动态),这一切都有效。
我尝试了什么:
我在帖子前尝试过这个:
if($('form').validate().form()){
...
}
这只是每次都返回true ..
从这篇文章我得到了2条建议 ASP.NET MVC 2 loading partial view using jQuery - no client side validation
添加
Sys.Mvc.FormContext._Application_Load();
部分加载后.. 并将帖子的数据类型设置为“html”。两者都没有。
我也试过这个方法没有运气: http://www.deepcode.co.uk/2010/08/mvc-ootb-validation-when-pulling-in.html
这种技术组合是非常常见的,我想,为什么它很难让它起作用?任何帮助都非常感谢。 谢谢
答案 0 :(得分:13)
在成功加载新表单的ajax后,您必须通过手动调用来指示不显眼的验证库解析新表单:
// insert new form into the DOM first, then call:
$.validator.unobtrusive.parse('<form selector>'));
$('<form selector>').validate(); // start validating
根据表单子元素中的data-xxx属性设置jquery.validation验证器。
之后,呼叫$('<form selector>').validate().form()
应按预期工作!
答案 1 :(得分:1)
你为什么试图劫持部分形式?我认为因为你劫持不引人注目的现场活动的形式没有解雇,这就是为什么你没有得到验证错误。
您是否尝试过使用Ajax表单? (Ajax.BeginForm(...))
如果您引入部分ajax表单,则应具有验证所需的所有信息。提交表单后,您可以指定要运行的javascript函数。
答案 2 :(得分:0)
好吧我终于得到了它。问题出在那里,不管我是否喜欢表格或者我使用的是Ajax.BeginForm(...),没有区别。如果我没有动态加载部分,它总是有效。
解决方案?
将jquery.validate.unobtrusive.min.js添加到部分视图中。 这可能是一个新手的错误,只将其添加到父视图或母版页,但如果这有助于某人,我很乐意承认我的这个错误:) 这个js文件使客户端验证工作,当然必须在每次加载部分(其中包含客户端验证)时调用它。