我有一个类,它的属性如下所示:
[AllowHtml]
[DataType(DataType.MultilineText)]
public string Description { get; set; }我已经放入了[AllowHtml]属性,以便通过构建的表单向该属性提交超文本标记语言,但我想要做的是将属性值作为原始超文本标记语言输出,而不对其进行转义。
我知道我可以使用Html.Raw(Model.Description),但我要找的是告诉Html.DisplayFor(m => m.Description)始终输出原始HTML的方法。我有没有一个属性可以用来修饰我的类中的属性,我希望这样做?
基本上,这是我的懒惰-我不想记住哪些属性可能包含超文本标记语言,所以当我需要做上面的事情时,我不想考虑使用Html.Raw(…) -我更希望我的模型知道它应该做什么并自动完成它。我试着寻找答案,但要么是我的措辞不正确,要么就是没有办法:
谢谢,
发布于 2011-06-02 23:12:10
更改您的Description属性以返回HtmlString。
Razor不会转义HtmlString值。
(实际上,Html.Raw所做的就是创建一个HtmlString)
发布于 2012-04-10 01:42:37
这实际上相当简单(一旦你知道怎么做……)。将您的DataType属性更改为[DataType(DataType.Html)],并创建一个局部视图,将其放在Views/Shared/DisplayTemplates/Html.cshtml中,如下所示:
@model string
@Html.Raw(Model)当然,您也不能更改DataType属性,并将视图命名为MultilineText.cshtml而不是Html.cshtml。
发布于 2011-06-02 23:28:36
只是在这里提供一些更多的信息-你的问题是@总是HtmlEncode,除非你返回了IHtmlString -所以这个问题是从@符号开始的。这是razor语法的好处之一--使用htmlencode比不使用htmlencode更安全。所以这里没有“快速”的方法,因为你的问题的根源是@符号,如果它找到IHtmlString,它将排除HtmlEncoding。所以-没有‘快速’的方法,除非你使用旧的<%语法,与razor相比,IMHO很糟糕:)
https://stackoverflow.com/questions/6216340
复制相似问题