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隐藏它,除非(或直到)需要。 当然,这可能不符合您的要求,但如果确实如此,那么我认为这是一种更好的方法。