如何使用像asp这样的Razor:Literal?

gre*_*mul 8 tags razor

我有一个简单的模型:

public class MyModel
{
     public string Text{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

我有一个View,它呈现MyModel的Text属性:

<p>@Model.Text</p>
Run Code Online (Sandbox Code Playgroud)

如何从Text中标记html标签?例如,我有文字" <b>Text</b>".我希望在标记p中获得粗体文本作为结果:

文本

但Razor按原样呈现文本:

<b>Text</b>
Run Code Online (Sandbox Code Playgroud)

par*_*cle 21

我想你需要像以下一样使用它:

<p>@Html.Raw(Model.Text)</p>
Run Code Online (Sandbox Code Playgroud)

你可以找到更多的信息在这里上菲尔哈克的博客.

anurse在评论中指出,您可以选择Text将View Model类型的成员类型设置为IHtmlString仅用于@Model.Text输出它.ASP.NET MVC非常聪明,可以意识到输出不应该被转义.

  • 当您想要偶尔渲染一些没有HTML编码的内容时,这是一个很好的解决方案.当您知道模型的属性始终是不应自动编码的HTML内容时,您应该创建该属性IHtmlString的类型.因此,如果将Text更改为IHtmlString而不是字符串,则可以键入@ Model.Text,Razor将正确输出标记.这样,很明显某些内容是HTML,应该仔细清理以避免HTML注入攻击. (3认同)