如何为Kendo UI DropDownList和ComboBox启用ASP.Net MVC客户端验证?

时间:2012-09-06 19:05:50

标签: asp.net-mvc jquery-validate kendo-ui unobtrusive-validation

当我在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控件不会。如果有办法为这些控件启用客户端验证,请告诉我,而无需手动连接它。

完整的示例解决方案附加到以下Kendo论坛帖子: http://www.kendoui.com/forums/mvc/dropdownlist/mvc-client-validation-not-working.aspx

3 个答案:

答案 0 :(得分:12)

根据对Kendo论坛的响应,验证无效的原因是因为jquery validate默认情况下不验证隐藏字段。更改它的最简单方法是使用$ .validate.setDefaults方法来覆盖这种行为,如下所示:

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

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

答案 1 :(得分:1)

在尝试了很多东西之后,我得出结论,使用jQuery不显眼的js库和kendo验证的ASP.NET MVC验证是两种不同且不兼容的野兽。我连接了服务器端和客户端代码以验证一个kendo Multi-Select控件,但没有什么真正起作用,包括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”是包含kendo多选控件的div元素。这个对我有用,直到我得到一个更清洁的方法:

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

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

祝所有人踏上这条道路,祝你好运。

答案 2 :(得分:0)

最好使用这个脚本:

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

你可以参考这个链接。

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