是否可以设置DataAnnotation属性[Display(Name =“Text”)]中包含的文本样式?

时间:2012-03-21 16:53:46

标签: asp.net-mvc-3 data-annotations

我想做这样的事情:

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

这是否可行(为显示属性中的文本设置样式)?目前它只是显示文字文本。

1 个答案:

答案 0 :(得分:0)

  

这是否可行(为显示属性中的文本设置样式)?

问题不在[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)