一尘不染

什么是MvcHtmlString?何时应使用它?

c#

文件MvcHtmlString不可怕启发:

表示不应再次编码的HTML编码的字符串。

我不清楚这到底意味着什么。似乎有些HTML帮助器方法返回MvcHtmlString,但是我在网上看到的一些自定义帮助器示例仅返回了常规字符串。

问题:

什么是MvcHtmlString

我什么时候应该选择MvcHtmlString超过string反之亦然?为什么?


阅读 288

收藏
2020-05-19

共1个答案

一尘不染

ASP.NET 4引入了新的代码块语法<%: %>。本质上,<%: foo %>翻译为<%= HttpUtility.HtmlEncode(foo) %>。该团队正在尝试让开发人员使用它,<%: %>而不是<%= %>尽可能使用它来防止XSS。

但是,这带来了一个问题,如果代码块已经对其结果进行了编码,则<%: %>语法将对其进行 重新编码 。通过引入IHtmlString接口(.NET
4中的新增功能)可以解决此问题。如果 FOO()<%: foo() %>返回一个IHtmlString,该<%: %>语法不会重新编码。

MVC 2的助手返回MvcHtmlString,它在ASP.NET 4上实现接口IHtmlString。因此,当开发人员<%: Html.*() %>在ASP.NET 4中使用时,结果将不会被双重编码。

编辑:

这种新语法的直接好处是您的视图更加简洁。例如,您可以编写<%: ViewData["anything"] %>而不是<%= Html.Encode(ViewData["anything"]) %>

2020-05-19