3

我在使用 jQuery 验证来验证 Kendo 小部件(特别是下拉列表)时遇到问题,这些小部件位于模态 KendoWindow 上,其中填充了使用 AJAX 检索的表单。除了使用隐藏字段(下拉列表、文本区域等)Kendo 小部件之外,验证对所有内容都很有效在模态 KendoWindow 上。解决方案应该是这样的:

$.validator.setDefaults({ ignore: ""});

但在我的情况下它不起作用。这是我的部分视图中的代码,它通过 ajax 加载模式窗口:

    @model ProductManagement.Models.BaseModel

    <script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>

    <script type="text/javascript">        
        $(function () {
            $.validator.setDefaults({ ignore: "" });
        });
    </script>

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)...

这样做有诀窍吗?任何帮助将不胜感激!

4

1 回答 1

3

哇,我真的花了很多时间在这上面,但我确实让它工作了。答案当然非常简单。以下是要点:

要将 Kendo UI 弹出窗口配置为使用 jQuery 验证 (MVC 4):

  1. 我使用 jQuery Validation Plugin 1.8.1 得到了这个工作。不确定如何使用 > 1.9 版执行此操作。

  2. 在 _Layout.cshtml 中,将以下内容添加到文档就绪函数中:
    $.validator.setDefaults({ ignore: "" }); 编辑:这是不正确的。1.8.1 版不需要。

  3. 在包含弹出表单的局部视图上,引用 jquery.validate.min.js 和 jquery.validate.unobtrusive.min.js

  4. 在表单上,​​所有字段必须具有正确的命名。例如,我使用的视图模型导致字段名称看起来像“VM_ProductInfo.Product_ID”、“VM_ProductInfo.Product_Name”等。如果任何字段的命名不一致,例如只是“Product_Description”(没有“VM_ProductInfo. " 前缀),验证只能部分正常工作,尽管出现错误,表单仍会提交。

  5. 在表单上,​​为任何隐藏字段包含 ValidationMessageFor。例如,如果我要隐藏 Product_ID 字段,我仍然需要包含验证,如下所示:

    @Html.HiddenFor(model => model.Product_ID) @Html.ValidationMessageFor(model => model.Product_ID)

回想起来,上面的数字 4 和 5 是最让我伤心的。如果我知道要检查这些,我会节省很多时间。

这是一个反复试验的解决方案。如果您知道更好的方法,请回复。

旁注:Kendo 文档说为 Dropdownlist 小部件指定名称是强制性的。这不是,至少据我所知。通过省略 .Name,表单将使用与表单其余部分一致的命名来构建。

于 2013-04-27T05:05:10.777 回答