使用新的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
。