繁体   English   中英

内联编辑模式剑道网格中的剑道验证消息无法通过数据注释工作

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

我正在使用 ASP.NET MVC 的剑道 UI。 我有一个内联编辑模式剑道网格,我的列中有一些 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
}

如您所见,我将 UIHint 用于 EditorTemplate,并使用必需数据注释来验证我的字段。 编辑器模板是这样的:

@(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"))
)

我的剑道格子是这样的:

@(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} 是必需的,而我需要在我的数据注释中显示消息。

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

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

.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"))
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM