始终使用MVC3和Razor输出原始HTML

我有一个类似于以下属性的类:

[AllowHtml] [DataType(DataType.MultilineText)] public string Description { get; set; } 

我已经放入[AllowHtml]属性让我通过我构建的表单向这个属性提交HTML,但我想要做的是输出属性的值作为原始HTML而不进行转义。

我知道我可以使用Html.Raw(Model.Description)但我正在寻找的是告诉Html.DisplayFor(m => m.Description)始终输出原始HTML的一些方法。 是否有一个属性我可以用来装饰我class级的属性,我希望这样做?

基本上我是懒惰的 – 我不想记住哪些属性可能包含HTML,所以我不想在我需要做上面的时候考虑使用Html.Raw(…) – 我更确切地说,我的模型知道它应该做什么并自动完成。 我试过寻找答案,但要么我没有正确地说它或者没有办法做到这一点:(

谢谢,

更改Description proerpty以返回HtmlString

Razor不会逃避HtmlString值。
(事实上​​,所有Html.Raw都会创建一个HtmlString

这实际上相当简单(一旦你知道如何……)。 将您的DataType属性更改为[DataType(DataType.Html)] ,并创建一个局部视图,将其放在Views/Shared/DisplayTemplates/Html.cshtml ,使用:

 @model string @Html.Raw(Model) 

当然,您也不能更改DataType attrib,并将视图命名为MultilineText.cshtml而不是Html.cshtml

只是在这里提供更多信息 – 你的问题是@将始终是HtmlEncode,除非你返回了IHtmlString – 所以问题来自@符号。 这是剃刀语法的好处之一 – 它对htmlencode更安全。 所以这里没有“快速”的方法,因为你的问题的根源是@符号,如果找到IHtmlString,它将排除HtmlEncoding。 所以 – 没有“快速”解决这个问题,除非你使用与剃刀相比恕我前悔的旧的<%语法:)