Есть ли способ получить доступ к 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("");
}

http://www.kristofclaes.be/blog/2011/08/26/an-htmlhelper-to-display-if-a-field-is-required-or-not-in-aspnet-mvc-3/

https://web.archive.org/web/20130711024856/http://www.kristofclaes.be/blog/2011/08/26/an-htmlhelper-to-display-if-a-field-is-required-or-not-in-aspnet-mvc-3/

Другие вопросы по тегам