我有一个类,它的属性看起来像这样:
[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
我已经放入了[AllowHtml]
属性,以便通过我构建的表单将HTML提交给这个属性,但我想做的是将属性的值输出为原始HTML,而不对其进行转义。
我知道我可以使用Html.Raw(Model.Description)
,但我正在寻找的是告诉Html.DisplayFor(m => m.Description)
总是输出原始HTML的某种方法。有没有一个属性我可以用来修饰我的类中的属性,我希望这样做?
基本上这是我的懒惰-我不想记住哪些属性可能包含HTML,所以当我需要做上述事情时,我不想考虑使用Html.Raw(…)
-我宁愿我的模型知道它应该做什么,并自动完成。我试着寻找答案,但要么我没有正确地措辞,要么没有办法做到这一点:(
谢啦
4条答案
按热度按时间qaxu7uf21#
更改
Description
属性以返回HtmlString
。Razor不会转义
HtmlString
值。(In事实上,
Html.Raw
所做的就是创建一个HtmlString
)t3psigkw2#
这其实很简单(一旦你知道如何。..)。将DataType属性更改为
[DataType(DataType.Html)]
,并创建一个局部视图,将其放入Views/Shared/DisplayTemplates/Html.cshtml
中,如下所示:当然,你也可以不改变你的DataType属性,将视图命名为
MultilineText.cshtml
而不是Html.cshtml
。sc4hvdpw3#
这里只提供更多的信息-您的问题是@将始终HtmlEncode,除非您返回IHtmlString-因此该问题源于@符号。这是剃刀语法的好处之一--它比不使用htmlencode更安全。所以这里没有“快速”的方法,因为问题的根源是@符号,如果它找到IHtmlString,它将排除HtmlEncoding。所以-没有'快速'的方法,除非你使用旧的〈%语法,与剃刀相比,IMHO很糟糕:)
aor9mmx14#
在模型中使用MvcHtmlString(examples)数据类型而不是string,允许为我传递原始html: