我对RazorGenerator有问题:它不能编译使用我的自定义助手的视图:
App_Code/ViewHelper.cshtml
@helper test(System.Web.Mvc.HtmlHelper html)
{
<h4>Test</h4>
}视图/Test.cshtml
(...)
@ViewHelper.test(this.Html)
(...)当我试图编译我的项目时,我得到了Test.cshtml的错误:
名称“ViewHelpers”在当前上下文中不存在
我尝试将各种名称空间添加到视图/web.config文件中:
<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>但没有成功..。
我是不是缺少了应该包含在这个文件中的名称空间?如果没有,是否有其他方法使RazorGenerator编译视图?另外,cshtml帮助程序甚至存在于命名空间中吗?
发布于 2015-12-04 15:08:51
解决方案:
您需要将此注释放在App_Code中的助手的开头。
@*
Generator: MvcHelper
GeneratePrettyNames : true
*@然后,在web.config中,您可以为剃刀页进行配置,您需要添加RazorGenerator为这些助手生成的命名空间:
<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>将YourWebAppNamespace更改为默认的项目名称空间(可能是项目名称):

解释:
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<dynamic>
{
#line 3 "..\..\App_Code\TestHelper.cshtml"
public System.Web.WebPages.HelperResult HelperName(string name) {您需要添加这些指令注释,以告诉剃刀生成器创建具有“普通”名称(与助手文件名相同,使用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#代码可以使用带有此生成助手的命名空间的语句。
发布于 2015-10-04 22:49:26
当我更新到MVC 5时,RazorGenerator也遇到了同样的问题。
根据RazorGenerator的codeplex探讨的说法,RazorGenerator.MsBuild包有时在解决正确版本的Razor使用时会出现问题,因此最终会丢失web.config中定义的名称空间。
要强制它使用Razor的正确版本(并希望获得您的命名空间),请在项目文件夹中创建一个名为razorgenerator.directives的文件,其中包含文本:RazorVersion: 3
发布于 2015-02-16 21:37:55
查看在obj\CodeGen文件夹中为帮助程序生成的实际cs-文件。这可能是类名问题,因此将其添加到helper cshtml-file的顶部:
@* GeneratePrettyNames : true *@https://stackoverflow.com/questions/28466275
复制相似问题