簡體   English   中英

為什么不在編輯器模板上顯示kendo ui網格驗證

[英]Why dont show kendo ui grid validation on editor template

為什么不在編輯字段的編輯器模板上向我顯示網格驗證? 我不明白為什么不閱讀數據注釋。 對不起,英語不好。

首先,我創建了這樣的劍道網格:

  <div id="grid">
    @(Html.Kendo().Grid<CardView>()
    .Name("Grid")
    .Columns(x =>
    {
        x.Bound(c => c.CardID).Title("Card Nm.");
        x.Bound(c => c.ExpirationDate).Format("{0:dd/MM/yyyy}");//.EditorTemplateName("KendoDatePicker");
        x.Command(cmd =>
        {
            cmd.Edit();
        }).Title("Edit");
    })
        .BindTo(Model)
        .DataSource(dataSource => dataSource
                    .Ajax()
                    .Model(model =>
                      {
                       model.Id(x => x.CardID);
                      })
                     .ServerOperation(true)
                     .Read(read => read.Action("Index", "Home"))
                     .Events(events => events.Error("error_handler"))
                     .Update(update => update.Action("Update", "Home"))
 .Editable(editable =>editable.Mode(GridEditMode.InLine)))
</div>

這是在數據源事件錯誤中使用的javascript:

<script>
 function error_handler(e, status) {//Klaidu isvedimas
        if (e.errors) {
            var message = "Error:\n";

            var grid = $('#GrdKendo').data('kendoGrid');
            var gridElement = grid.editable.element;

            var validationMessageTemplate = kendo.template(
                "<div id='#=field#_validationMessage' " +
                    "class='k-widget k-tooltip k-tooltip-validation " +
                        "k-invalid-msg field-validation-error' " +
                    "style='margin: 0.5em;' data-for='#=field#' " +
                    "data-val-msg-for='#=field#' role='alert'>" +
                    "<span class='k-icon k-warning'></span>" +
                    "#=message#" +
                    "<div class='k-callout k-callout-n'></div>" +
                "</div>");

            $.each(e.errors, function (key, value) {
                if (value.errors) {
                    gridElement.find("[data-valmsg-for=" + key + "],[data-val-msg-for=" + key + "]")
                        .replaceWith(validationMessageTemplate({ field: key, message: value.errors[0] }));
                    gridElement.find("input[name=" + key + "]").focus();
                }
            });
            grid.one("dataBinding", function (e) {
                e.preventDefault();   // cancel grid rebind
            });
        }
    }

當我創建viewModel時 (在CardID上有效,但在使用編輯器模板的expirationDate上不起作用):

public class CardView
{
    [Required(ErrorMessage = "Card Expiration Date")]
    public virtual string CardID { get; set; }
    [UIHint("DatePicker")]
    [Required(ErrorMessage = "Card Expiration Date")]
    public virtual DateTime ExpirationDate { get; set; }
}

然后在Views \\ Shared \\ EditorTemplates **位置創建了名稱為** DatePicker.cshtml的編輯器模板:

    @model DateTime?
    @(Html.Kendo()
    .DatePicker()
    .Name(ViewData.ModelMetadata.PropertyName.ToString())
        .Format("{0:dd/MM/yyyy}"))

那么,如何在編輯器模板字段上讀取數據注釋呢? 數據注釋可在不使用編輯器模板的字段上完美運行

我找到了解決方案(搜索了大約兩天)。 需要在編輯器模板的html屬性中添加Html.GetUnobtrusiveValidationAttributes(“ Validation”,ViewData.ModelMetadata)

這是代碼:

@model DateTime?
@(Html.Kendo()
.DatePicker()
.Name(ViewData.ModelMetadata.PropertyName.ToString())
.Format("{0:dd/MM/yyyy}")
.HtmlAttributes(Html.GetUnobtrusiveValidationAttributes("Validation",     
 ViewData.ModelMetadata))
 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM