【问题标题】:App_Code required for ASP.NET MVC 4 HtmlHelper Extension in VB.NET?VB.NET 中的 ASP.NET MVC 4 HtmlHelper 扩展需要 App_Code?
【发布时间】:2013-02-01 01:40:21
【问题描述】:

我花了两个小时的大部分时间试图弄清楚这一点。如下:

我只想创建一个 HTMLHelper 扩展方法。这已经做过很多次了,我知道我的编码是正确的。但是,如果我将代码文件放在 App_Code 中(我认为在 MVC 世界中不再有意义的文件夹!),Razor 似乎只知道它。

我怎么知道的?

很简单...我在两个独立的同名文件中有两个相同编码的 HTMLHelper 扩展方法。

第一个文件,放在 ~/Extensions 中,包含扩展方法DisplayForProperty

第二个文件,放在 ~/App_Code 中,包含扩展方法DisplayForProperty2

在视图中,我输入@Html.Displ- Intellisense 只显示DisplayForProperty2

我没有@using 声明,因为似乎不需要查看DisplayForProperty2。更不用说,在这种情况下它不会改变任何东西。

那么,这是为什么呢?这甚至应该以这种方式发生吗?这只是剃刀智障,还是我智障?

我正在使用完全更新的 VS 2012 副本。

PS - 另一方面,我是否必须将命名空间引用放在每个 /Views 目录下的每个 web.config 中(如在每个单独的区域中),加上根目录?为什么我不能把它放在根目录或根 /Views 目录中?

【问题讨论】:

  • 这是一个网站“项目”吗?如果是这样,请使用 Web 应用程序项目尝试此操作。
  • 此项目是使用 Visual Studio 2012 中的 ASP.NET Internet 应用程序模板启动的。
  • 您可以将命名空间引用放在应用程序根目录下的 Web.config 中,或者(甚至更好)放在 ~/Views/ 文件夹根目录下的 Web.config 中,与默认文件并列由 MVC 引用。该配置将被任何子目录继承。

标签: asp.net-mvc vb.net asp.net-mvc-4 visual-studio-2012 html-helper


【解决方案1】:

您不必将 html 辅助扩展方法放在 App_Code 中。虽然有点老,但 asp.net 上的教程:http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs 可以很好地指导您。

我通常在 MVC 项目的根目录下有一个“Helpers”文件夹,每个文件夹都有单独的类文件。它们位于 Project.MVC.Helpers 命名空间中,我将 @using Project.MVC.Helpers 添加到我想在其中使用助手的 Razor 视图中。

【讨论】:

  • 好的。这正是我的想法!那你能解释一下我看到的行为吗?
  • 和我做的一样,只是创建一个文件夹并将以下语句添加到位于视图文件夹中的 web.config 或添加@using-statement
【解决方案2】:

app_code 文件夹仍然是一个特殊的文件夹,项目会自动编译和引用。

【讨论】:

    【解决方案3】:

    当您将 HtmlHelper 类放在 App_Code 之外的文件夹中时,您是否检查了在 HtmlHelper 类上生成的命名空间?

    也许您遗漏的只是 @using 指令指向您视图中的命名空间。

    【讨论】:

    • 可以分享一下项目文件夹吗?
    【解决方案4】:

    您可能需要将包含帮助程序的命名空间添加到您的视图文件夹内的 Web.config 文件中。

      <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.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="Namespace.Of.Your.Helper" />
          </namespaces>
        </pages>
      </system.web.webPages.razor>
    

    这将允许您的视图在没有引用命名空间的 @using 的情况下使用您的助手。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多