Html.Label用于不呈现Html



我正在将一个模型绑定到视图。

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。

您的显示字符串"<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 */
}

然后将该类应用于标签(来自.NETMVC-如何将类分配给Html.LabelFor?):

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

至于您的编辑,如果您只想将Display属性的文本呈现为文本HTML,您必须:

  • 介绍您自己的HTML助手
  • 在那里,写一个标签(并确保设置了for=属性)
  • 读取DisplayAttribute的值
  • @Html.Raw(),该值作为标签文本
  • 使用@Html.YourLabelHelper(m => m.Message)对其进行渲染

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

最新更新