2017-10-11 118 views
2

我正在使用劍橋UI的ASP.NET MVC。我有一個內聯編輯模式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我用所需的數據標註爲我場的驗證。 編輯模板是這樣的:

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

回答

0

爲了驗證爲使用編輯模板列工作,你需要添加以下您的編輯器模板

.HtmlAttributes(Html.GetUnobtrusiveValidationAttributes(「驗證」,
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")) 
    )