Есть ли способ стилизации текста, содержащегося в атрибуте DataAnnotation [Display (Name = "Text")]? - PullRequest
0 голосов
/ 21 марта 2012

Я хочу сделать что-то вроде этого:

[Display(Name = "Plain text. <span class=\"red strong\">Red text bolded.</span>")]

Возможно ли это (стилизовать текст в атрибуте отображения)?В настоящее время это просто отображение буквального текста.

1 Ответ

0 голосов
/ 22 марта 2012

Возможно ли это (стилизовать текст в атрибуте отображения)?

Проблема не в атрибуте [Display].Он находится внутри помощника Html.LabelFor, который вы использовали для отображения.Этот атрибут всегда HTML кодирует значение.Если вам не нравится это поведение, вы можете написать собственный помощник, который не будет кодировать значение:

public static class HtmlExtensions
{
    public static IHtmlString MyLabelFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> expression
    )
    {
        var metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData);
        var htmlFieldName = ExpressionHelper.GetExpressionText(expression);
        var labelText = (metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>()));
        if (string.IsNullOrEmpty(labelText))
        {
            return MvcHtmlString.Empty;
        }
        var label = new TagBuilder("label");
        label.Attributes.Add("for", TagBuilder.CreateSanitizedId(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
        label.InnerHtml = labelText;
        return new HtmlString(label.ToString());

    }
}

, а затем:

@Html.MyLabelFor(x => x.Foo)
...