验证动态添加的控件

Gre*_*ern 9 asp.net-mvc jquery

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

<div class="editor-field">
    @*@Html.EditorFor(model => model.Middlename)*@
    <div id="x"></div>

    <script type="text/javascript">

        $(function () {

            var newTextBoxDiv = $(document.createElement());

            newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />');

            newTextBoxDiv.appendTo('#x');
        });

    </script>

    @Html.ValidationMessageFor(model => model.Middlename)
</div>
Run Code Online (Sandbox Code Playgroud)

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

<script type="text/javascript">


var newTextBoxDiv = $(document.createElement());

newTextBoxDiv.html('<input type="text" name="Middlename" id="Middlename" width="100" data-val="true" data-val-required="The Middleneim field is required." />');

newTextBoxDiv.appendTo('#x');
</script>
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*mbo 0

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

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