I'm trying to write a simple declarative html helper:
@helper Echo(string input) {
@input
}
The helper works fine if I embed it into the page I want to use it on. But if I move it to a separate .cshtml
file and place that file in the ~/Views/Helpers
directory, my view can't be compiled anymore because the helper is not found. According to Scott Gu's blog article on Razor it should work.
What am I doing wrong?
In App_Code a @helper needs this to work properly:
I know this is late in the game... But, pass in the current View to the helper function. From the view you have access to Html and the helper functions.
The
~/Views/Helpers
location as describe in that ScottGu post will not work in MVC 3 RTM. At the time that article was written it was a design idea we were tossing around but ultimately we were not able to implement it.Putting your helpers in App_Code works but has certain limitations that impact certain MVC scenarios (for example: no access to standard MVC
Html.
helpers)I followed the steps listed in Scott's blog as well and wasn't able to get it working either.
I did some searching and found this link: http://dotnetslackers.com/articles/aspnet/Experience-ASP-NET-MVC-3-Beta-the-Razor-View-Engine.aspx#s19-create-custom-helper-method
Followed the steps and it's working. The key seems to be both the App_Code folder as well as using the file name dot helper name when calling the helper.
Another take on CodeAngry's answer, this enables the helpers for every method in the file.
Simple workaround:
In each helper add argument WebViewPage page.
App_Code\Test.cshtml:
This helper usage in any page: