Html.Label不呈现HTML

时间:2016-03-24 15:56:56

标签: asp.net-mvc-4 html-helper

我正在绑定一个模型来查看。

public class Validation
{
   [Display("Please enter in <h5>day(s)</h5>")]
   public string Message { get; set; }
}

Message属性将设为Please enter in <h5>day(s)</h5>

在视图中将模型属性绑定到LabelFor

@Html.LabelFor(m => m.Message)

期望输出为

Please enter in day(s)

但实际输出是

Please enter in <h5>day(s)</h5>

我希望字符串的一部分在大小和化妆品上有所不同,因此将CSS应用于整个标签并不是我想要的。

1 个答案:

答案 0 :(得分:1)

您的显示字符串"<h5>some text</h5>"将呈现为文本,而不是HTML。 MVC会将< >个字符编码为&lt; &gt;,使其按原样显示。

无论如何,你不应该这样做。

正确的方法是应用显示字符串以包含所需的文本:

[Display("some text")]

然后创建一个CSS类:

label.fancyLabel {
    /* your style here that makes a label look like a h5 */
}

然后将该类应用于标签(来自.NET MVC - How to assign a class to Html.LabelFor?):

@Html.LabelFor(m => m.Message, new { @class= "fancyLabel" })

对于您的修改,如果您只想将Display属性的文字呈现为文字HTML,则必须:

  • 介绍您自己的HTML帮助程序。
  • 在那里,写一个标签(并确保设置for=属性)。
  • 阅读DisplayAttribute的值。
  • @Html.Raw()该值为标签文字。
  • 使用@Html.YourLabelHelper(m => m.Message)进行渲染。

但是在你的模型上使用HTML并不是真的可取。视图和模板应该决定如何渲染模型,而不是相反。