首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RazorGenerator无法看到自定义的cshtml助手

RazorGenerator无法看到自定义的cshtml助手
EN

Stack Overflow用户
提问于 2015-02-11 23:02:54
回答 5查看 3.9K关注 0票数 18

我对RazorGenerator有问题:它不能编译使用我的自定义助手的视图:

App_Code/ViewHelper.cshtml

代码语言:javascript
复制
@helper test(System.Web.Mvc.HtmlHelper html)
{
    <h4>Test</h4>    
}

视图/Test.cshtml

代码语言:javascript
复制
(...)
@ViewHelper.test(this.Html)
(...)

当我试图编译我的项目时,我得到了Test.cshtml的错误:

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

我尝试将各种名称空间添加到视图/web.config文件中:

代码语言:javascript
复制
  <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帮助程序甚至存在于命名空间中吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-12-04 15:08:51

解决方案:

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

代码语言:javascript
复制
@*
    Generator: MvcHelper
    GeneratePrettyNames : true
*@

然后,在web.config中,您可以为剃刀页进行配置,您需要添加RazorGenerator为这些助手生成的命名空间:

代码语言:javascript
复制
<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将您的助手视为普通的剃须刀视图,因此生成的代码如下所示:

代码语言:javascript
复制
    [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#文件:

代码语言:javascript
复制
    [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#代码可以使用带有此生成助手的命名空间的语句。

票数 12
EN

Stack Overflow用户

发布于 2015-10-04 22:49:26

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

根据RazorGenerator的codeplex探讨的说法,RazorGenerator.MsBuild包有时在解决正确版本的Razor使用时会出现问题,因此最终会丢失web.config中定义的名称空间。

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

票数 1
EN

Stack Overflow用户

发布于 2015-02-16 21:37:55

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

代码语言:javascript
复制
@* GeneratePrettyNames : true *@
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28466275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档