Answers:
@(new HtmlString(myString))
就像已经提到的@ Html.Raw(string)方法一样,如果输出MvcHtmlString,则不会被编码。在将自己的扩展添加到HtmlHelper时,或者从您可能包含html的视图模型返回值时,此功能很有用。
例如,如果您的视图模型为:
public class SampleViewModel
{
public string SampleString { get; set; }
public MvcHtmlString SampleHtmlString { get; set; }
}
对于Core 1.0+(和MVC 5+),请使用HtmlString
public class SampleViewModel
{
public string SampleString { get; set; }
public HtmlString SampleHtmlString { get; set; }
}
然后
<!-- this will be encoded -->
<div>@Model.SampleString</div>
<!-- this will not be encoded -->
<div>@Html.Raw(Model.SampleString)</div>
<!-- this will not be encoded either -->
<div>@Model.SampleHtmlString</div>
请@Html.Raw()
谨慎使用,因为这可能会给编码和安全性带来更多麻烦。我了解用例,因为我自己必须这样做,但要小心……只是避免让所有文本通过。例如,仅保留/转换特定的字符序列,并始终对其余字符进行编码:
@Html.Raw(Html.Encode(myString).Replace("\n", "<br/>"))
然后,您不必担心尚未创建潜在的安全漏洞,并且所有特殊/外国字符都将在所有浏览器中正确显示。
@Html.Raw(Html.Encode(myString).Replace(Html.Encode("\n"), "<br/>"))
用于ASP.NET Core
您也可以使用WriteLiteral方法
"'<>etc...
将被转义。正确的方法是使用MvcHtmlString,它将允许使用“非法”字符。例如,如果您正在编码Json数据...而未对整个模型进行编码