ASP.NET MVC 3.0部分内部和外部表单具有不显眼的数据验证属性问题

Vas*_*kin 4 validation jquery-selectors unobtrusive-validation asp.net-mvc-3

我有条件内容,根据条件使用jQuery我包括或从表单元素中排除这些部分.

这是我的功能:

function MoveInsideForm(id) {
       $("#" + id).insertAfter("#myForm")
   }

function MoveOutsideForm() {
       $("#myPartial1").insertAfter("#element-outside-from");
       $("#myPartial2").insertAfter("##element-outside-from");
   }
Run Code Online (Sandbox Code Playgroud)

问题在于insertAfter()它没有复制HTML 5自定义属性

例如,我有一个这样的元素

<input data-val="true" data-val-required="*" id="MyInput" name="MyInput" type="text" value="" class="input-validation-error"/>
Run Code Online (Sandbox Code Playgroud)

insertAfter()复制它是这样的:

<input id="MyInput" name="MyInput" type="text" value=""/>
Run Code Online (Sandbox Code Playgroud)

有什么办法可以说insertAfter()复制HTML 5属性吗?我的jQuery版本是1.6.1.

更新:

谢谢你的评论.这是事情,当我在表单中渲染我的部分内容时,使用不显眼的数据属性生成输入,但如果我在表单外部渲染我的部分,那么不显眼的数据属性最初不会包含在输入中.

因此,当我在表单外部渲染部分时,它们最初不包含数据属性.所以它不是jQuery的问题,它是否是不insertAfter()显眼的数据验证属性生成的本质?

cou*_*ben 6

为了产生不引人注意的验证,MVC必须有一个FormContext.当您将HtmlHelper放在Html.BeginForm或之外时Ajax.BeginForm,除非您手动实例化FormContext,否则HtmlHelpers将不具有不显眼的验证属性.您可以通过在帮助程序之前插入以下代码来手动实例化FormContext:

this.ViewContext.FormContext = new FormContext();
Run Code Online (Sandbox Code Playgroud)

如果您将助手放在BeginForm()之前,请确保在助手之后和开始表单之前清除FormContext.