在Ajax请求后手动绑定JQuery验证

时间:2011-06-07 17:35:05

标签: asp.net-mvc-3 jquery-validate unobtrusive-validation

我正在请求将一个ASP.net MVC视图放到一个活动框中,该视图包含已经标记了JQuery不显眼的验证器插件所使用的属性的表单字段。

客户端脚本不起作用,我的理论是因为验证框架仅在页面加载时被触发,这一点已经过了MVC视图加载到活动框中的时间。

那么我怎样才能让验证框架知道它有新的表单字段来修复?

干杯,伊恩。

5 个答案:

答案 0 :(得分:17)

var $form = $("form");

$form.unbind();
$form.data("validator", null);

$.validator.unobtrusive.parse(document);
// Re add validation with changes
$form.validate($form.data("unobtrusiveValidation").options);

答案 1 :(得分:6)

您可以查看following blog post。这是another one

答案 2 :(得分:1)

另一种选择,相当诡计,对我有用。只需在ajax调用返回的局部视图的开头添加以下行

this.ViewContext.FormContext = new FormContext(); 

Reference

答案 3 :(得分:1)

出于某种原因,我不得不将bjan和dfortun的答案结合起来......

所以我把它放在我看来:

@{
  this.ViewContext.FormContext = new FormContext();
}

这在ajax调用结束后执行:

var form = $("#EnrollmentForm");
form.unbind();
form.data("validator", null);
$.validator.unobtrusive.parse(document);
form.validate(form.data("unobtrusiveValidation").options);

答案 4 :(得分:0)

我有类似的问题。我有一个表单正在使用Ajax请求重新显示具有不同表单字段的表单的一部分。我通过使用

在客户端手动执行来使用不显眼的验证
@Html.TextBoxFor

我的文本框。由于某种原因,验证在尝试使用无效字段提交时有效(即,文本框以红色标出,并显示相应的错误消息,其中包含我放在

中的内容
data_val_required
例如,

属性。

但是,在我单击一个按钮使得Ajax请求修改具有不同字段的表单然后再次提交之后,只显示无效字段上的红色轮廓,但不会呈现错误消息。

bjan的伎俩对我有用,但我仍然无法看到导致这个问题的原因。执行客户端验证所需的所有HTML都在那里,我只能弄清楚为什么错误消息属性值不会显示。

我能想到的是,jQuery验证代码在提交后没有再次检查表单字段。