ASP.NET MVC剃刀渲染没有编码

Razor默认编码string。 有没有编码没有任何特殊的语法渲染?

自ASP.NET MVC 3以来,您可以使用:

@Html.Raw(myString) 
 @(new HtmlString(myString)) 

以及已经提到的@ Html.Raw(string)的方法,如果你输出一个MvcHtmlString它不会被编码。 当您将自己的扩展添加到HtmlHelper时,或者从视图模型中返回一个您知道可能包含html的值时,这会非常有用。

例如,如果您的视图模型是:

 public class SampleViewModel { public string SampleString { get; set; } public MvcHtmlString 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/>")) 

那么你就放心,你没有创造一个潜在的安全漏洞,任何特殊/外来字符在所有浏览器中正确显示。

在ActionLink的情况下,它通常在链接文本上使用HttpUtility.Encode。 在这种情况下,您可以使用HttpUtility.HtmlDecode(myString)它为我工作时使用HtmlActionLink来解码我想传递的string。 例如:

  @Html.ActionLink(HttpUtility.HtmlDecode("myString","ActionName",..) 

您也可以使用WriteLiteral方法

HTML RAW:@ Html.Raw(yourString)