[英]ASP.NET MVC Unobtrusive validation - why form context is needed?
我正在尝试为动态创建的项目启用不显眼的javascript验证。 javascript的问题已经在另一个SO问题中解决了,这不是这里的情况。
在这种情况下,动态创建项目只是克隆在主窗体之外生成的一个空项目。
问题是,如果我在html表单元素之外使用像TextBoxFor,CheckBoxFor,...这样的html帮助器,则不会生成验证工作所需的属性(例如, data-val-required
)。
我已经检查过MVC源代码,如果FormContext
为null,则会返回一个返回空属性列表的行。 (这没有例外)
为什么?
您可以手动伪造表单上下文。 例如,如果你有一些不包含<form>
元素的局部视图,并且使用AJAX调用它来重新生成一些输入元素,你可以这样做:
@model MyViewModel
@{
ViewContext.FormContext = new FormContext();
}
@Html.LabelFor(x => x.Foo)
@Html.EditorFor(x => x.Foo)
@Html.ValidationMessageFor(x => x.Foo)
相应的输入元素现在将拥有data-*
属性。 但这可能还不够。 如果你只是刷新(使用AJAX)只有一部分<form>
但实际上没有替换DOM中的表单元素,调用$.validator.unobtrusive.parse
就不够了。 您需要删除与此元素关联的所有先前验证:
success: function(result) {
// we are replacing only a portion of the form
$('#somePartOfTheForm').html(result);
$('form').removeData('validator');
$('form').removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse('form');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.