该文件为MvcHtmlString不可怕启发:
MvcHtmlString
表示不应再次编码的HTML编码的字符串。
我不清楚这到底意味着什么。似乎有些HTML帮助器方法返回MvcHtmlString,但是我在网上看到的一些自定义帮助器示例仅返回了常规字符串。
问题:
什么是MvcHtmlString?
我什么时候应该选择MvcHtmlString超过string反之亦然?为什么?
string
ASP.NET 4引入了新的代码块语法<%: %>。本质上,<%: foo %>翻译为<%= HttpUtility.HtmlEncode(foo) %>。该团队正在尝试让开发人员使用它,<%: %>而不是<%= %>尽可能使用它来防止XSS。
<%: %>
<%: foo %>
<%= HttpUtility.HtmlEncode(foo) %>
<%= %>
但是,这带来了一个问题,如果代码块已经对其结果进行了编码,则<%: %>语法将对其进行 重新编码 。通过引入IHtmlString接口(.NET 4中的新增功能)可以解决此问题。如果 FOO() 的<%: foo() %>返回一个IHtmlString,该<%: %>语法不会重新编码。
<%: foo() %>
MVC 2的助手返回MvcHtmlString,它在ASP.NET 4上实现接口IHtmlString。因此,当开发人员<%: Html.*() %>在ASP.NET 4中使用时,结果将不会被双重编码。
<%: Html.*() %>
编辑:
这种新语法的直接好处是您的视图更加简洁。例如,您可以编写<%: ViewData["anything"] %>而不是<%= Html.Encode(ViewData["anything"]) %>。
<%: ViewData["anything"] %>
<%= Html.Encode(ViewData["anything"]) %>