4

我从有条件的内容,根据使用jQuery的条件我包括或从表单元素中排除此部分。ASP.NET MVC 3.0部分内部和外部形式与不显眼的数据验证属性问题

这里是我的功能:

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

function MoveOutsideForm() { 
     $("#myPartial1").insertAfter("#element-outside-from"); 
     $("#myPartial2").insertAfter("##element-outside-from"); 
    } 

问题是与insertAfter()它并没有得到复制HTML 5的自定义属性

,比如我有这样的

<input data-val="true" data-val-required="*" id="MyInput" name="MyInput" type="text" value="" class="input-validation-error"/> 

元素但insertAfter()这样复制:

<input id="MyInput" name="MyInput" type="text" value=""/> 

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

UPDATE:

谢谢你们征求意见。 这是事情,当我在表单中呈现我的部分内部输入获得与不显眼的数据属性生成输入,但如果我在窗体外部呈现我的部分,最初没有包含在输入中的不显眼的数据属性。

因此,当我在表单之外呈现部分时,它们最初不包含数据属性。 所以它不是jQuery的问题insertAfter(),它是不引人注目的数据验证属性生成的本质?

+0

我原型的一些你的代码[这里](http://jsfiddle.net/katsuke/sX67h/),它似乎保持了特殊的属性。查看我的代码,并让我知道是否有什么我失踪。 (这是用JQuery 1.6) – Katsuke 2011-06-14 06:40:36

+0

@Katsuke要复制数据属性,最好使用方法数据()http://api.jquery.com/data/但我只是想知道如何移动所有包括数据属性以及使用insertAfter()。 – 2011-06-14 07:07:46

+0

Vasya。我只测试了这个小提琴http://jsfiddle.net/geertvdc/mVXSQ/中的代码,并且它复制了包括自定义属性在内的每个属性(我在IE9中测试) – GeertvdC 2011-06-14 08:57:14

回答

6

为了生成不显眼的验证,MVC必须有一个FormContext。当您将HtmlHelper放置在Html.BeginFormAjax.BeginForm之外时,HtmlHelpers将不具有不显眼的验证属性,除非您手动实例化FormContext。你可以通过你的助手之前插入下面的代码手动实例化一个FormContext:

this.ViewContext.FormContext = new FormContext(); 

如果你是一个BeginForm(之前放置你的助手),那么可以肯定你的助手后并开始表单之前清除FormContext。

+0

我通过PartialView动态加载表单域。在部分视图中使用上面的代码是否有任何负面影响? – 2011-08-22 18:39:07

+1

@Nick Olsen,没有负面影响,只要你首先测试'FormContext'是否存在,例如'if(this.ViewContext.FormContext == null){...}'。 – counsellorben 2011-08-23 15:21:56

+1

@counsellorben:很好的答案......我今天在这个问题上生气了。 – Jonathan 2011-09-27 18:37:27