атрибуты проверки - потеря при использовании шаблона редактора - PullRequest
0 голосов
/ 05 марта 2020

Просмотр модели

    public class TestVM
    {
        [Required]
        [Range(1, 1000, ErrorMessage = "{0} must bettween {1} ~ {2}")]
        public int MaxAge { get; set; }
    }

Просмотр

@model TestVM;

<div class="text-center">
        @Html.EditorFor(x => x.MaxAge)
</div>

Shared> EditorTemplates> Int32.cs html

@model int?
@{
    var editorHtmlAttributes = new Dictionary<string, object>();
}

<div class="col-md-4">
    @Html.TextBox(ViewData.ModelMetadata.PropertyName, Model, editorHtmlAttributes)
    @if (!string.IsNullOrEmpty(ViewData.ModelMetadata.Description))
    {
        <em class="tip">@Html.Raw(ViewData.ModelMetadata.Description)</em>
    }
</div>

@ Html .TextBox сгенерирует что-то вроде

<input id="MaxAge_MaxAge" name="MaxAge.MaxAge" type="text" value="0">

, но если мы удалим Int32.cs html, он сгенерирует с атрибутами проверки клиента

<input class="text-box single-line"  id="MaxAge" name="MaxAge" type="number" value="0"
 data-val="true" data-val-range="MaxAge must bettween 1 ~ 1000"
 data-val-range-max="1000" data-val-range-min="1" data-val-required="The MaxAge field is required.">

в asp. net mvc мы можем использовать метод Html .GetUnobtrusiveValidationAttributes для получения атрибутов проверки. Я был отлажен в исходный код Html .TextBox , метаданные атрибутов проверки свойства (ViewData.ModelMetadata.ValidatorMetadata) не могут быть найдены создателем тегов, я думаю, что если я смогу передать их это должно работать правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...