ASP.NETMVC用の剣道UIを使用しています。インライン編集モードの剣道グリッドがあり、列にいくつかのClientEditorTemplateDropDownListsがあります。グリッドは、モデルのリスト「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 DataAnnotationを使用しています。エディターテンプレートは次のようなものです。
@(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"))
)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加