我想做这样的事情:
[Display(Name = "Plain text. <span class=\"red strong\">Red text bolded.</span>")]
这是否可行(为显示属性中的文本设置样式)?目前它只是显示文字文本。
答案 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)