1

我正在加载一个主视图,该视图最初使用具有必填字段的模型呈现部分视图。正如您所期望的那样,客户端验证在该初始 Partial 上工作,但是当我使用 AJAX 动态呈现相同的 Partial 视图时,客户端验证无法将动态添加的字段识别为唯一的。

我对此并不感到惊讶,因为毕竟它们具有相同的名称、id 和验证数据破折号属性,但是有没有办法让客户端验证消息分别识别每个字段,而无需在脚本中手动检查和应用客户端验证?

主要观点:

@{Html.EnableClientValidation(); }
@{using (Html.BeginForm()){
    @Html.Partial("_WorkItem")
    <div id="newItemHolder">

    </div>

    <div id="addItem">Add Item</div>
}}

<script type="text/javascript">
  $(document).ready(function () {
    $("#addItem").click(function () {
        $.ajax({
            type: "POST",
            data: {},
            url: "Controller/NewItem",
            success: function (data) {
                //inject partial views content to newItemHolder
                jQuery.validator.unobtrusive.parse($("#newItemHolder"));
            }
        });
    });
  });
</script>
4

2 回答 2

1

如果您不刷新包含表单,您可能还需要以下内容:

success: function (data) {
    var holder = $('#newItemHolder');
    // get the containing form
    var form = $(holder).closest('form');

    holder.html(data);
    form.removeData('validator');
    form.removeData('unobtrusiveValidation');
    jQuery.validator.unobtrusive.parse(form);
}
于 2012-06-13T20:56:10.857 回答
0

我找到了解决此问题的方法,如果其他人遇到相同的情况/问题,我将包括我提出的解决方案。如果有人通过数据注释完成了使用客户端验证来验证每个部分的目标,我肯定也很想听听你是如何做到的!

我所做的是将每个部分放入一个表单中,这样验证在每个表单中的字段上都有唯一的名称,然后使用一些触发器,最终使用表单提交,我调用了以下内容。

$('form').each(function () {
    $(this).validate().form();
});

结果是每个必填字段都被自己验证,当为一个必填字段提供值时,它不会导致客户端验证对所有共享相同名称的控件成功。

于 2012-06-14T20:26:17.137 回答