繁体   English   中英

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

[英]How to define razor helper for C# MVC project so that namespace is found?

MVC4,实体框架5,ASP.Net4。我正在尝试制作一个剃刀助手,以便在多个区域中使用。 已经问过几次了,但是在Google上实施了所有解决方案后,问题仍然存在。

智能感知正在识别帮助程序,但是在实时服务器上,我无法逃脱编译错误“找不到类型或名称空间名称'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指令
    • @使用System.Web.Mvc;
    • @using System.Web.Mvc.Html;
    • @using System.Web.Mvc.Razor;
    • @using System.Text.RegularExpressions

每一步骤之后,请清理,构建,重新启动Visual Studio,然后重新发布。 但是Razor编译器中仍无法识别辅助名称空间。

有人有什么想法吗?

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

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

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

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

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

如果您的解决方案仅包含一个MVC项目,则只需在MVC项目内部创建一个名为Helpers的文件夹,然后将helpers类放入其中。

仅供参考: 如果您正在开发大型应用程序,则需要考虑为助手类创建一个单独的类库项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM