VB.NET中的ASP.NET MVC 4 HtmlHelper扩展需要App_Code



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

我只想创建一个HTMLHelper扩展方法。这以前已经做过很多次了,我知道我对它的编码是正确的。然而,Razor似乎只有当我把代码文件放在App_code(一个我认为在MVC世界中不再有意义的文件夹!(中时才知道这一点

我怎么知道这个?

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

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

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

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

我没有@using语句,因为这似乎不是查看DisplayForProperty2所必需的。更不用说,在这种情况下,它不会改变任何事情。

那么,为什么会这样呢?这种情况应该以这种方式发生吗?这只是拉佐的弱智,还是我是那个弱智?

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

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

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

我通常在MVC项目的根目录下有一个"Helpers"文件夹,每个文件夹都有单独的类文件。它们在Project.MVC.Helpers命名空间中,我向Razor视图添加了一个@using Project.MVC.Helpers,我想在.

中使用帮助程序

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

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

也许您所缺少的只是指向视图中的命名空间的@using指令。

您可能需要将包含帮助程序的命名空间添加到视图文件夹中的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的情况下使用辅助对象。

相关内容

  • 没有找到相关文章

最新更新