6

当我在 MVC Razor 视图中使用 Kendo UI ComboBox 和 DropDownList 控件时,客户端验证不会触发。这是一个例子:

@using Kendo.Mvc.UI
@model KendoDropDownTest.Models.TestModel

@{
    ViewBag.Title = "Kendo Drop Down and Combo Box Test";
}

<h2>Kendo Drop Down and Combo Box Test</h2>

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

        <div>
            @Html.LabelFor(x => x.DropDownValue)
            @(Html.DropDownListFor(x => x.DropDownValue, Model.Options, "-- Select an Option --"))
            @Html.ValidationMessageFor(x => x.DropDownValue)
        </div>

    <fieldset>
        <legend>Kendo</legend>
        <div>
            @Html.LabelFor(x => x.KendoComboValue)
            @(Html.Kendo().ComboBoxFor(x => x.KendoComboValue)
                  .BindTo(Model.Options.Select(x => x.Text)))
            @Html.ValidationMessageFor(x => x.KendoComboValue)
        </div>

        <div>
            @Html.LabelFor(x => x.KendoDropDownValue)
            @(Html.Kendo().DropDownListFor(x => x.KendoDropDownValue)
                .OptionLabel("-- Select an Option --")
                .BindTo(Model.Options))
            @Html.ValidationMessageFor(x => x.KendoDropDownValue)
        </div>
    </fieldset>

    <input type="submit" value="Submit" />
}

以及对应的型号:

public class TestModel
{
    [Required]
    public string DropDownValue { get; set; }
    [Required]
    public string KendoComboValue { get; set; }
    [Required]
    public string KendoDropDownValue { get; set; } 

    public SelectListItem[] Options = new[]
    {
        new SelectListItem
        {
            Text = "Option 1",
            Value = "1"
        }, 
        new SelectListItem
        {
            Text = "Option 2",
            Value = "2"
        }, 
        new SelectListItem
        {
            Text = "Option 3",
            Value = "3"
        }, 
    };
}

提交表单时,非 Kendo UI 下拉菜单会适当地显示验证错误,但 Kendo 控件不会。请让我知道是否有一种方法可以为这些控件启用客户端验证,而无需手动连接它。

以下剑道论坛帖子附有完整的示例解决方案: http ://www.kendoui.c​​om/forums/mvc/dropdownlist/mvc-client-validation-not-working.aspx

4

3 回答 3

15

根据 Kendo 论坛上的回复,验证不起作用的原因是 jquery validate 默认情况下不验证隐藏字段。最简单的更改方法是使用 $.validate.setDefaults 方法来覆盖该行为,如下所示:

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

这仍然没有将“input-validation-error”类添加到组合框或下拉列表中,但至少它添加了验证错误,并防止表单被提交。

于 2012-09-10T17:05:40.233 回答
1

在尝试了很多东西之后,我得出一个结论,使用 jQuery unobtrusive js 库的 ASP.NET MVC 验证和 kendo 验证是两个不同且不兼容的野兽。我连接了服务器端和客户端代码以验证 kendo 多选控件,但没有真正起作用,包括 jQuery 验证器 ($.validator) 上的 setDefaults() 方法。我终于找到了这篇文章http://www.macaalay.com/2014/02/15/enabling-asp-net-mvc-client-validation-for-kendo-ui-components/并且不得不单独连接剑道验证,需要注意的是它没有集成到 ASP.NET MVC 验证摘要控件和一般的 ASP.NET MVC 验证 API 中。

这是演示必须做什么的代码片段。同样,可能会有更清洁和更好的方法。在我的示例中,此代码段与我的 ViewModel 对象上的绑定属性“SelectedIDs”上的必需验证属性结合使用。“divCategories”是包含剑道多选控件的 div 元素。这个现在对我有用,直到我得到一种更清洁的方法:

Html.Kendo().MultiSelectFor(m => m.SelectedIDs)
            .Name("SelectedIDs")
            .BindTo(CategoryItems)
            .HtmlAttributes(new { @class = "height100pc", @onchange= "$('#divCategories').kendoValidator().validate();" })

无论如何,您都可以将内联 javascript 分成脚本标记或实用程序 javascript 文件。

祝走这条路的人好运..

于 2015-11-30T13:54:25.953 回答
0

最好使用这个脚本:

<script>
    $(function () {
        $("form").kendoValidator();
    });
</script>

你可以参考这个链接。

http://www.macaalay.com/2014/02/15/enabling-asp-net-mvc-client-validation-for-kendo-ui-components/

于 2021-02-04T20:57:24.380 回答