Kendo 行内编辑模式中的验证消息 kendo 网格无法通过数据注释工作

Kendo validation message in inLine Edit mode kendo grid not working through Data annotation

我正在为 ASP.NET MVC 使用 kendo UI。我有一个内联编辑模式 kendo 网格,在我的列中有一些 ClientEditorTemplate DropDownLists。网格绑定到模型列表 "ContractPricingPolicy"。

public class ContractPricingPolicy
{
    //Some other fields

    [CustomDisplayName(XmlResourceNames.ContractPricingPoliciesXml, "PricingPolicyType")]
    [UIHint("ClientPricingPolicyType")]
    [Required(ErrorMessage = "Tο πεδίο {0} είναι υποχρεωτικό")]
    public PricingPolicyType PricingPolicyType { get; set; }

    //Some other fields
}

如您所见,我对 EditorTemplate 使用 UIHint,并使用 Required Data Annotation 来验证我的字段。 编辑器模板是这样的:

@(Html.AthenaTransportDdl("GetPricingPolicyTypes", "Enterprise", HttpVerbs.Post)
    .Name("PricingPolicyType")
    .DataTextField("Label")
    .DataValueField("Id")
    .AutoBind(false)
    .Filter("contains")
    .HtmlAttributes(new { @class = "atn-flexdisplay-container" })
    .OptionLabel(Html.GetResource(AthenaWeb.Models.Common.XmlResourceNames.CommonXml, "PricingPolicyTypeOptionLabel"))
)

我的kendo网格是这样的:

@(Html.Kendo().Grid(Model.PricingPolicies)
        .Name("pricingPoliciesGrid")
        .Columns(columns =>
        {
            columns.Bound(c => c.Id).Hidden();
            columns.Bound(c => c.PricingPolicyType).Width(100)
            // Some more columns
            columns.Command(command => { command.Edit().Text(" ").UpdateText(" ").CancelText(" "); command.Destroy().Text(" "); }).Width(70)
            .HtmlAttributes(new { style = "text-align:center" });
        })
        .ToolBar(toolbar => toolbar.Template("<div class='col-md-2'><button id='addPPRowBtn' class='btn btn-success' data-atn-mouseover='cStatusDisabled'><span class='fa fa-plus'></span> " + Html.GetResource(gcw, "ToolBarInsertNew") + "</div>"))
        .Editable(editable => editable.Mode(GridEditMode.InLine).DisplayDeleteConfirmation(Html.GetResource(cpp, "DeleteConfirmationMsg")))
        .DataSource(dataSource => dataSource
            .Ajax()
            .ServerOperation(true)
            .Model(model =>
            {
                model.Id(c => c.Id);
                model.Field(p => p.PricingPolicyType).DefaultValue(new AthenaWeb.Models.Enterprise.PricingPolicyType());
                // Some other fields
            })
        .Create(create => create.Action("PricingPolicy_Create", "Student"))
        .Read(read => read.Action("PricingPolicy_Read", "Student", new { id = Model.Id }))
        .Destroy(update => update.Action("PricingPolicy_Deactivate", "Student"))
        )
    )

当我插入一个新行并尝试在未选择定价策略类型的情况下保存我的行时,不会触发来自数据注释的验证。但是,如果我像这样设置我的编辑器模板所需的属性:

(Html.AthenaTransportDdl("GetPricingPolicyTypes", "Enterprise", HttpVerbs.Post)
    .Name("PricingPolicyType")
    .DataTextField("Label")
    .DataValueField("Id")
    .AutoBind(false)
    .Filter("contains")
    .HtmlAttributes(new { @class = "atn-flexdisplay-container", required = "required" })
    .OptionLabel(Html.GetResource(AthenaWeb.Models.Common.XmlResourceNames.CommonXml, "PricingPolicyTypeOptionLabel"))
)

验证触发,但显示的消息是默认字段 {NameOfField} 是必需的,而我需要在我的数据注释中显示消息。

我的问题是为什么会发生这种情况以及如何启用要显示的数据注释验证消息(我猜确切的问题是如何为绑定字段的行触发 kendo验证器到编辑器模板)

要使用编辑器模板对列进行验证,您需要在编辑器模板中添加以下内容

.HtmlAttributes(Html.GetUnobtrusiveValidationAttributes("Validation",
ViewData.ModelMetadata))

    (Html.AthenaTransportDdl("GetPricingPolicyTypes", "Enterprise", HttpVerbs.Post)
        .Name("PricingPolicyType")
        .DataTextField("Label")
        .DataValueField("Id")
        .AutoBind(false)
        .Filter("contains")
        .HtmlAttributes(Html.GetUnobtrusiveValidationAttributes("Validation",     
           ViewData.ModelMetadata))  
.OptionLabel(Html.GetResource(AthenaWeb.Models.Common.XmlResourceNames.CommonXml, "PricingPolicyTypeOptionLabel"))
    )