I'm having a problem with RazorGenerator: it can't compile views that uses my custom helper:
App_Code/ViewHelper.cshtml
@helper test(System.Web.Mvc.HtmlHelper html)
{
<h4>Test</h4>
}
Views/Test.cshtml
(...)
@ViewHelper.test(this.Html)
(...)
When I try to compile my project I get this error for Test.cshtml:
The name 'ViewHelpers' does not exist in the current context
I tried adding various namespaces to my Views/web.config file:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization" />
<add namespace="MyProject" />
<add namespace="Kendo.Mvc.UI" />
<add namespace="MvcSiteMapProvider.Web.Html" />
<add namespace="MvcSiteMapProvider.Web.Html.Models" />
</namespaces>
</pages>
</system.web.webPages.razor>
but with no success...
Am I missing some namespace that should be included in this file? If not, is there any other way to make RazorGenerator compile the view? Also, does cshtml helpers even exist in a namespace?
You need to put this comment at the beginning of a helper you have in App_Code
:
@*
Generator: MvcHelper
GeneratePrettyNames : true
*@
Then in web.config
where you have configuration for razor pages you need to add namespace that RazorGenerator generated for those helpers:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="YourWebAppNamespace.App_Code" />
</namespaces>
</pages>
</system.web.webPages.razor>
Change YourWebAppNamespace
to you default project namespace (it's probably your project name):
RazorGenerator treated you helpers like normal razor view so the generated code looked like this:
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/App_Code/TestHelper.cshtml")]
public partial class _App_Code_TestHelper_cshtml : Komplett.Chrome.Web.Features.Shared.BaseView<dynamic>
{
#line 3 "..\..\App_Code\TestHelper.cshtml"
public System.Web.WebPages.HelperResult HelperName(string name) {
You need to add these directive comments to tell razor generator to create class with "normal" name (the same as helper file name, you do this with GeneratePrettyNames
directive) and with static public function so it could be used in other views (done by Generator: MvcHelper
directive).
With those directive comments RazorGenerator generate C# file like this:
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
public class TestHelper : System.Web.WebPages.HelperPage
{
#line 6 "..\..\App_Code\TestHelper.cshtml"
public static System.Web.WebPages.HelperResult HelperName(string name) {
You now just need to add namespace to web.config
so C# generated code for other views would have using statement with namespace of this generated helper.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With