Есть ли способ получить доступ к аннотациям при создании шаблонов MVC3 EditorFor? - PullRequest
2 голосов
/ 05 августа 2011

Предположим, у меня есть модель представления со свойством, которое выглядит примерно так:

[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 ]

3 голосов
/ 18 сентября 2011

Это решение хорошо сработало, создав вспомогательный метод для определения наличия атрибута [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/

3 голосов
/ 05 августа 2011

Метаданные модели доступны из ViewData, т. Е.

ViewData.ModelMetadata.GetDisplayName()

...