2011-04-04 52 views
8

我有一个简单的模型:如何像asp:Literal一样使用Razor?

public class MyModel 
{ 
    public string Text{get;set;} 
} 

我有一个观点,这使得为MyModel的Text属性:

<p>@Model.Text</p> 

如何从喜欢的标签文本渲染html标签?例如,我有文本“<b>Text</b>”。我想获取标记P内粗体文字作为结果:

文本

但剃刀渲染文本是:

<b>Text</b> 

回答

19

我认为你需要使用它喜欢:

<p>@Html.Raw(Model.Text)</p> 

你可以在Phil Haack的博客上找到更多信息here

anurse中,你可以,或者,将您的视图模型类型的Text成员的类型为IHtmlString,只需使用@Model.Text输出它的评论指出。 ASP.NET MVC很聪明,意识到输出不应该被转义。

+3

这是一个很好的解决方案,当你想偶尔渲染一些没有HTML编码的内容。当你知道你的模型的一个属性总是HTML内容不应该被自动编码时,你应该制作该属性的IHtmlString类型。因此,如果您将文本更改为IHtmlString而不是字符串,则可以键入@ Model.Text,Razor将正确输出标签。这样,显然某些内容是HTML,应该仔细清理以避免HTML注入攻击。 – 2011-04-04 17:37:01

+0

@anurse:哇,好评。我自己不知道。我将更新答案以添加此信息。 – paracycle 2011-04-05 08:07:18

相关问题