Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何为C#MVC项目定义razor助手,以便找到名称空间?_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

如何为C#MVC项目定义razor助手,以便找到名称空间?

如何为C#MVC项目定义razor助手,以便找到名称空间?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,MVC4,实体框架5,ASP.NET4。我正在尝试制作一个剃须刀助手,可以跨多个区域使用。这已经被问了好几次了,但是在谷歌上实现了所有的解决方案之后,问题依然存在 intellisense正在识别帮助程序,但在live server上,我无法逃脱编译错误“找不到类型或命名空间名称‘MyHelpers’(是否缺少using指令或程序集引用?) 以下是我所做的: 在/App_代码中定义@helper类 在/Views/Helpers中定义@helper类 在 视图的名称/web.config 在中

MVC4,实体框架5,ASP.NET4。我正在尝试制作一个剃须刀助手,可以跨多个区域使用。这已经被问了好几次了,但是在谷歌上实现了所有的解决方案之后,问题依然存在

intellisense正在识别帮助程序,但在live server上,我无法逃脱编译错误“找不到类型或命名空间名称‘MyHelpers’(是否缺少using指令或程序集引用?)

以下是我所做的:

  • 在/App_代码中定义@helper类
  • 在/Views/Helpers中定义@helper类

  • 视图的名称/web.config
  • 在中添加了对MyHelper命名空间的引用 &MyArea/Views/web.config的ltsystem.web.webPages.razor>
  • 将所有建议使用的指令添加到帮助器定义的顶部
    • @使用System.Web.Mvc
    • @使用System.Web.Mvc.Html
    • @使用System.Web.Mvc.Razor
    • @使用System.Text.RegularExpressions
在每个步骤之后,清理、生成、重新启动VisualStudio并重新发布。但是在Razor编译器中仍然无法识别帮助器名称空间


有人有什么想法吗?

我个人不喜欢在App_Code文件夹中添加类,该文件夹在过去是为网站项目设计的

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

<强> FY:如果您正在开发一个大型应用程序,则需要考虑为辅助类创建一个单独的类库项目。

不要使用视图帮助器(<代码> @帮助器< /代码>语法)。这些仅在运行时进行评估,如果不是不可能正确测试的话,也是很困难的

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

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

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

是的,我同意为文件夹保留魔法名称不是一个好的设计。我的解决方案确实有几个项目来分离不同数据库的dll。我会尝试在某个时候为助手类添加一个单独的项目。我试试看,然后发回。谢谢。RazorGenerator不再有效,它允许您获得编译时间checking@Arjang当前位置我写这篇文章时也是这样。然而,必须安装和配置RazorGenerator(这不是每个人都会做的,甚至不是每个人都想做的),并且您只能进行编译时检查,因为它实际上是在将视图编译成代码;它就是这样做的。使用
@helper
仍然是一个可怕的想法,即使是在编译时检查,如果不是因为违反了MVC模式的核心原则。