validation动态添加的控件

如何将动态添加的控件添加到validation中?

@*@Html.EditorFor(model => model.Middlename)*@
$(function () { var newTextBoxDiv = $(document.createElement()); newTextBoxDiv.html(''); newTextBoxDiv.appendTo('#x'); }); @Html.ValidationMessageFor(model => model.Middlename)

我注意到,当我不使用ready函数时,即

  var newTextBoxDiv = $(document.createElement()); newTextBoxDiv.html(''); newTextBoxDiv.appendTo('#x');  

,客户端validation启动。 有没有办法明确地将延迟创建的输入包含在validation中?

更新 :这个答案是如果你使用jquery不显眼的validation,你没有写下你使用的。

首先,将此插件添加到jQuery ready: http : //xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

请注意,您必须在表单标记内添加元素。 让我们说你的标签周围有一些包装,我称之为“元素”。

将元素追加到DOM后,请调用:

 $.validator.unobtrusive.parseDynamicContent($(element).find("form").selector); var form = $(element).find("form"); $(form).valid(); $(form).find("input").each(function () { $(this).blur(function () { $(this).valid(); }); }); $(form).find("select").each(function () { $(this).change(function () { $(this).valid(); }); 

通过将值推入“window.mvcClientValidationMetadata”validation器数组中,将技术添加到MVC客户端validation在技术上是可行的。 这里有一篇非常好的文章,展示了一些涉及的脚本和技术。 这对服务器端validation没有帮助,但由于客户端在没有javascript的情况下无法获得此输入,因此您已经减轻了这一点。

我通常会对此应用更标准的渐进增强模式。 默认情况下创建中间名输入,并实现标准MVCvalidation器。 然后使用jQuery隐藏它,除非(或直到)需要。 当然,这可能不符合您的要求,但如果确实如此,那么我认为这是一种更好的方法。