【问题标题】:With the new Razor View Engine, should my HtmlHelpers return string or IHtmlString?使用新的 Razor 视图引擎,我的 HtmlHelpers 应该返回字符串还是 IHtmlString?
【发布时间】:2011-06-03 13:37:41
【问题描述】:

使用 Razor 视图引擎,无论何时您将字符串直接输出到页面,它都是 HTML 编码的。例如:

@"<p>Hello World</p>"

实际上将输出到页面:

&lt;p&gt;Hello World &lt;/p&gt;

在浏览器中显示为:

你好世界

但问题是,在创建 Html 帮助程序时,到目前为止,使用旧的 aspx 视图引擎我只会返回一个字符串,然后将其输出到浏览器:

<%= Html.MyCoolHelperMethod(); %>

所以我的问题基本上是这样的。我这样做:

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper)
{
   return new helper.Raw("<p>Hello World</p>");
}

在这种情况下,我可以在我的 cshtml 中执行此操作:

@Html.MyCoolHelperMethod();

还是我这样做:

public static string MyCoolHelperMethod(this HtmlHelper helper)
{
   return "<p>Hello World</p>";
}

在这种情况下,我需要在我的 cshtml 中完成这项工作:

@Html.Raw(Html.MyCoolHelperMethod());

显然第一种方法使视图看起来更干净,但我只是想知道常见的模式是否实际上是帮助者返回 IHtmlString 而我过去一直做错了。

【问题讨论】:

标签: c# asp.net-mvc razor html-encode


【解决方案1】:

在大多数情况下,您应该返回IHtmlString 的实例。这是内置助手*遵循的模式,这意味着助手的使用者无需担心编码不足或过度编码。

您应该只返回HtmlString 的新实例,而不是使用Raw 函数。

public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) {
    return new HtmlString("<p>Hello World</p>");
}

*请注意,MVC 3 实际上使用 MvcHtmlString 作为其助手的返回类型,但这是 MVC 2 天的保留。 (复杂的故事,但简而言之,IHtmlString 仅在 .NET 4 中引入,并且由于 MVC 2 支持 .NET 3.5,MvcHtmlString 类型是作为中间步骤引入的)。所有针对 MVC 3 及更高版本的助手都应返回 IHtmlString

【讨论】:

  • "所有面向 MVC 3 及更高版本的帮助程序都应返回 IHtmlString。" - 正是我需要知道的!
猜你喜欢
  • 2012-01-06
  • 2016-08-08
  • 1970-01-01
  • 2023-03-25
  • 2014-10-28
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多