With the new Razor View Engine, should my HtmlHelpers return string or IHtmlString?

With the Razor View Engine, anytime you output a string directly to the page, it's HTML encoded. e.g.:

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

will actually get output to the page as:

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

Which would show up in the browser as:

Hello World

Here's the problem though, when creating Html helpers, till now, with the old aspx view engine I would just return a string, and output that to the browser:

<%= Html.MyCoolHelperMethod(); %>

So my question is basically this. Do I do this:

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

in which case I can just do this in my cshtml:

@Html.MyCoolHelperMethod();

or do I do this:

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

in which case I need to do the work in my cshtml:

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

Obviously the first approach makes the view look a lot cleaner, but I'm just wondering if the common pattern is in fact for helpers to return an IHtmlString and I've been doing it wrong in the past.

28
задан animuson 6 September 2012 в 21:08
поделиться