使用新的Razor View引擎,我的HtmlHelpers应该返回字符串还是IHtmlString?

使用Razor View Engine,只要您将字符串直接输出到页面,它就是HTML编码的。 例如:

@"

Hello World

"

实际上会输出到页面:

 <p>Hello World </p> 

哪个会在浏览器中显示为:

Hello World

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

  

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

 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并且我过去做错了。

在大多数情况下,您应该返回IHtmlString的实例。 这就是内置帮助器*所遵循的模式,这意味着帮助者的消费者不需要担心编码不足或过度编码。

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

 public static IHtmlString MyCoolHelperMethod(this HtmlHelper helper) { return new HtmlString("

Hello World

"); }

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