Просмотр модели
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) не могут быть найдены создателем тегов, я думаю, что если я смогу передать их это должно работать правильно.