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 回答
不要使用视图助手(
@helper
语法) . 这些仅在运行时进行评估,即使不是不可能正确测试也很困难 .相反,创建一个扩展
HtmlHelper
的静态类,如下所示:如果您不使用名称空间声明,它将变为全局,您可以从任何地方(包括视图)引用它 . 对于大多数事情来说这是一个坏主意,但对于扩展它是没问题的,除非您遇到使用提供具有相同方法名称的类似扩展的库的问题 . 如果您选择将它们命名为安全,那么您只需要将命名空间添加到视图目录的Web.config中,就像之前类似的那样 .
我个人不喜欢在 App_Code 文件夹中添加为过去 Website Project 设计的文件夹 .
如果您的解决方案只包含一个MVC项目,您只需在MVC项目中创建一个名为Helpers的文件夹,并在其中放置帮助程序类 .
FYI: 如果您正在开发大型应用程序,则需要考虑为辅助类创建单独的类库项目 .