使用新的Razor视图引擎,我的HtmlHelpers应该返回string还是IHtmlString?

26 浏览
0 Comments

使用新的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日
0
0 Comments

在大多数情况下,您应该返回一个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

0