asp.net 始终使用MVC3和Razor输出原始HTML

yb3bgrhw  于 2023-05-02  发布在  .NET
关注(0)|答案(4)|浏览(112)

我有一个类,它的属性看起来像这样:

[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(…)-我宁愿我的模型知道它应该做什么,并自动完成。我试着寻找答案,但要么我没有正确地措辞,要么没有办法做到这一点:(
谢啦

qaxu7uf2

qaxu7uf21#

更改Description属性以返回HtmlString
Razor不会转义HtmlString值。
(In事实上,Html.Raw所做的就是创建一个HtmlString

t3psigkw

t3psigkw2#

这其实很简单(一旦你知道如何。..)。将DataType属性更改为[DataType(DataType.Html)],并创建一个局部视图,将其放入Views/Shared/DisplayTemplates/Html.cshtml中,如下所示:

@model string
@Html.Raw(Model)

当然,你也可以不改变你的DataType属性,将视图命名为MultilineText.cshtml而不是Html.cshtml

sc4hvdpw

sc4hvdpw3#

这里只提供更多的信息-您的问题是@将始终HtmlEncode,除非您返回IHtmlString-因此该问题源于@符号。这是剃刀语法的好处之一--它比不使用htmlencode更安全。所以这里没有“快速”的方法,因为问题的根源是@符号,如果它找到IHtmlString,它将排除HtmlEncoding。所以-没有'快速'的方法,除非你使用旧的〈%语法,与剃刀相比,IMHO很糟糕:)

aor9mmx1

aor9mmx14#

在模型中使用MvcHtmlString(examples)数据类型而不是string,允许为我传递原始html:

//escaped string
public string cLiteral { get; set; }

//raw html string
public MvcHtmlString labelMessage { get; set; }

相关问题