RazorGenerator无法看到自定义的cshtml帮助器

我遇到了RazorGenerator的问题:它无法编译使用我的自定义助手的视图:

App_Code文件/ ViewHelper.cshtml

@helper test(System.Web.Mvc.HtmlHelper html) { 

Test

}

查看/ Test.cshtml

 (...) @ViewHelper.test(this.Html) (...) 

当我尝试编译我的项目时,我得到Test.cshtml的这个错误:

“ViewHelpers”这个名称在当前上下文中不存在

我尝试将各种命名空间添加到我的Views / web.config文件中:

                  

但没有成功……

我错过了一些应该包含在这个文件中的命名空间吗? 如果没有,是否还有其他方法可以让RazorGenerator编译视图? 此外,cshtml助手甚至存在于命名空间中吗?

解:

您需要将此注释放在App_Code中的助手的开头:

 @* Generator: MvcHelper GeneratePrettyNames : true *@ 

然后在web.config中你有razor页面的配置,你需要添加RazorGenerator为这些帮助器生成的命名空间:

         

YourWebAppNamespace更改为您的默认项目名称空间(可能是您的项目名称):

Visual Studio中项目的默认命名空间


说明:

RazorGenerator像普通的剃刀视图一样对待你的助手,因此生成的代码如下所示:

  [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 { #line 3 "..\..\App_Code\TestHelper.cshtml" public System.Web.WebPages.HelperResult HelperName(string name) { 

你需要添加这些指令注释,告诉razor生成器创建具有“普通”名称的类(与帮助文件名相同,使用GeneratePrettyNames指令执行此操作)和静态公共函数,以便可以在其他视图中使用(由Generator: MvcHelper指令)。 使用这些指令注释RazorGenerator生成C#文件,如下所示:

  [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) { 

您现在只需要将命名空间添加到web.config因此C#为其他视图生成的代码将使用带有此生成的帮助程序的命名空间的using语句。

查看obj \ CodeGen文件夹中为帮助程序生成的实际cs文件。 它可能是类名称问题,因此将其添加到帮助程序cshtml文件的顶部:

 @* GeneratePrettyNames : true *@ 

事实certificate,我需要编译帮助程序本身才能使其正常工作。

这并没有让我走得太远:RazorGenerator无法“看到”Mvc命名空间引用。 我读过RG与MVC 5.0或更高版本不兼容(或者是它?)。

当我更新到MVC 5时,我遇到了与RazorGenerator相同的问题。

根据对RazorGenerator的codeplex的讨论 ,似乎RazorGenerator.MsBuild包有时会解决使用正确版本的Razor的问题,因此最终会丢失web.config中定义的命名空间。

要强制它使用正确版本的Razor(并希望获取你的命名空间),在包含文本的项目文件夹中创建一个名为razorgenerator.directives的文件: RazorVersion: 3

我正在使用RazorGenerator.MsBuild编译我的视图和RazorGenerator.Mvc来加载它们。 对我来说最简单的App_Code修复是将以下内容添加到帮助文件的顶部

 @* Generator: MvcHelper GeneratePrettyNames: true Namespace: My.Projects.Namespace *@ 

有了这个,就没有web.config更改或其他任何需要做的事情。