Using MVC 3 RTM I'm getting a strange NullReferenceException
:
@helper TestHelperMethod() {
var extra = "class=\"foo\"";
<div @Html.Raw(extra)></div>
}
It turns out that Html
(of type HtmlHelper
) is null
.
I've never seen this before in a regular view. I'm starting to experiment with declarative helper methods in Razor (so far they seem a little limited) and I'm quite stumped by what I'm seeing here.
Using Drew Noakes suggestion, I have come to a workaround that does the trick for now and that can be easily removed once the issue is solved in a newer version of MVC (that is if more stuff isn't changed that would break it:))
The goal is to be able to use an HtmlHelper inside a declarative helper method that lives in a file in App_Code without having a NullReferenceException. To solve this I included in all the files in App_Code the following:
@using System.Web.Mvc;
@functions
{
private static new HtmlHelper<object> Html
{
get { return ((WebViewPage)CurrentPage).Html; }
}
private static UrlHelper Url
{
get { return ((WebViewPage)CurrentPage).Url; }
}
}
This does seem to do the trick as I can now write the following helper (in the same file):
@helper PrintAsRaw(string htmlString)
{
@Html.Raw(htmlString)
}
Obviously the helper method is just an example. This solution has the downside that the @functions declarations has to be introduced in all helper declaration files in App_Code, but does avoid complicating the call to the helper, as you can simply write in a view:
@MyAppCodeFile.PrintAsRaw("<p>My paragraph</p>")
Hope this helps...