使用新的Razor视图引擎,我的HtmlHelpers应该返回string还是IHtmlString?
使用新的Razor视图引擎,我的HtmlHelpers应该返回string还是IHtmlString?
使用 Razor 视图引擎时,任何时候您直接在页面上输出字符串都会进行 HTML 编码。例如:
@"
Hello World
"
实际上会输出到页面上:
<p>Hello World </p>
这在浏览器中会显示为:
Hello World
不过,这里有个问题,当创建 HtmlHelper 时,现在,使用旧版 aspx 视图引擎时,我只需返回字符串,然后将其输出到浏览器:
<%= Html.MyCoolHelperMethod(); %>
所以,我的问题基本上是这样。我该这么做:
public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { return new helper.Raw("
Hello World
"); }
这样的话,我可以在我的 cshtml 中只需这样做:
@Html.MyCoolHelperMethod();
还是我该这么做:
public static string MyCoolHelperMethod(this HtmlHelper helper) { return "
Hello World
"; }
这样的话,我需要在我的 cshtml 中做这个工作:
@Html.Raw(Html.MyCoolHelperMethod());
显然,第一种方法使视图看起来更加干净,但我只是想知道常见的模式是否实际上是帮助器返回 IHtmlString
,而我过去一直做错了。
admin 更改状态以发布 2023年5月21日
在大多数情况下,您应该返回一个IHtmlString
的实例。 这是内置助手*遵循的模式,这意味着助手的使用者不需要担心过度或欠度编码。
您应该使用HtmlString
的新实例代替使用Raw
函数。
public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { return new HtmlString("Hello World
"); }
*请注意,MVC 3实际上使用MvcHtmlString
作为其助手的返回类型,但这是从MVC 2时代延续下来的。 (这是一个复杂的故事,但简而言之,由于IHtmlString
仅在. NET 4中引入,而MVC 2支持.NET 3.5,因此引入了MvcHtmlString
类型作为一种中间步骤)。所有针对MVC 3及更高版本的助手都应返回IHtmlString
。