繁体   English   中英

ASP.NET MVC Unobtrusive验证 - 为什么需要表单上下文?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM