Есть ли способ получить доступ к DataAnnotations при создании шаблонов MVC3 EditorFor?
Предположим, у меня есть модель представления со свойством, которое выглядит примерно так:
[Required]
[Display(Name = "Your name")]
public string Name { get; set; }
Я хочу создать шаблон EditorFor, который будет выглядеть примерно так:
<label>
@Model.DisplayName
@if (Model.Required)
{
<span class="required">*</span>
}
<label>
@Html.TextBoxFor(model => model)
Очевидно, вышесказанное не удастся (Model.Required
а также Model.DisplayName
), но я просто использую это как пример того, что я пытаюсь сделать.
Это возможно?
Заранее спасибо.
2 ответа
Решение
Метаданные модели доступны из ViewData
т.е.
ViewData.ModelMetadata.GetDisplayName()
Это решение хорошо сработало для меня, создав вспомогательный метод для определения наличия атрибута [Required] или его отсутствия:
public static MvcHtmlString RequiredSymbolFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
string symbol = "*",
string cssClass = "editor-field-required")
{
ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (modelMetadata.IsRequired)
{
var builder = new TagBuilder("span");
builder.AddCssClass(cssClass);
builder.InnerHtml = symbol;
return new MvcHtmlString(builder.ToString(TagRenderMode.Normal));
}
return new MvcHtmlString("");
}