首页 文章

如何为C#MVC项目定义razor helper以便找到命名空间?

提问于
浏览
1

MVC4,实体框架5,ASP.Net 4.我正在尝试使用剃须刀助手来跨多个区域使用 . 这已被问过几次,但在Google上实施了所有解决方案后,问题仍然存在 .

intellisense识别帮助器,但在实时服务器上我无法逃避编译错误“找不到类型或命名空间名称'MyHelpers'(你是否缺少using指令或程序集引用?)” .

这是我做的:

  • 在/ App_Code中定义了@helper类

  • 在/ Views / Helpers中定义了@helper类

  • 添加了对MyHelper命名空间的引用
    Views / web.config的<system.web.webPages.razor>

  • 在MyArea / Views / web.config的&ltsystem.web.webPages.razor>中添加了对MyHelper命名空间的引用

  • 在Helper定义的顶部添加了所有推荐的using指令

  • @using System.Web.Mvc;

  • @using System.Web.Mvc.Html;

  • @using System.Web.Mvc.Razor;

  • @using System.Text.RegularExpressions

完成每一步后,清理,构建,重新启动visual studio,然后重新发布 . 但是Razor编译器仍然无法识别辅助命名空间 .

有没有人有任何想法?

2 回答

  • 0

    不要使用视图助手( @helper 语法) . 这些仅在运行时进行评估,即使不是不可能正确测试也很困难 .

    相反,创建一个扩展 HtmlHelper 的静态类,如下所示:

    public static class HtmlHelperExtensions
    {
        public static IHtmlString Sample(this HtmlHelper htmlHelper)
        {
            ...
        }
    }
    

    如果您不使用名称空间声明,它将变为全局,您可以从任何地方(包括视图)引用它 . 对于大多数事情来说这是一个坏主意,但对于扩展它是没问题的,除非您遇到使用提供具有相同方法名称的类似扩展的库的问题 . 如果您选择将它们命名为安全,那么您只需要将命名空间添加到视图目录的Web.config中,就像之前类似的那样 .

  • 2

    我个人不喜欢在 App_Code 文件夹中添加为过去 Website Project 设计的文件夹 .

    如果您的解决方案只包含一个MVC项目,您只需在MVC项目中创建一个名为Helpers的文件夹,并在其中放置帮助程序类 .

    FYI: 如果您正在开发大型应用程序,则需要考虑为辅助类创建单独的类库项目 .

相关问题