Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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
Asp.net mvc VB.NET中ASP.NET MVC 4 HtmlHelper扩展所需的应用程序代码?_Asp.net Mvc_Vb.net_Asp.net Mvc 4_Visual Studio 2012_Html Helper - Fatal编程技术网

Asp.net mvc VB.NET中ASP.NET MVC 4 HtmlHelper扩展所需的应用程序代码?

Asp.net mvc VB.NET中ASP.NET MVC 4 HtmlHelper扩展所需的应用程序代码?,asp.net-mvc,vb.net,asp.net-mvc-4,visual-studio-2012,html-helper,Asp.net Mvc,Vb.net,Asp.net Mvc 4,Visual Studio 2012,Html Helper,我花了两个小时的时间想弄明白这件事。下面是: 我只想创建一个HTMLHelper扩展方法。这已经做了很多次了,我知道我的编码是正确的。然而,Razor似乎只有在我将代码文件放在App_code(一个我认为在MVC世界中不再有意义的文件夹)中时才知道这一点 我怎么知道的 非常简单…我在两个独立的同名文件中有两个相同编码的HTMLHelper扩展方法 第一个文件位于~/Extensions中,包含扩展方法DisplayForProperty 第二个文件位于~/App_代码中,包含扩展方法Displa

我花了两个小时的时间想弄明白这件事。下面是:

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

我怎么知道的

非常简单…我在两个独立的同名文件中有两个相同编码的HTMLHelper扩展方法

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

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

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

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

那么,这是为什么?这应该是这样吗?这只是剃刀的智障,还是我智障

我使用的是VS 2012的完全更新版本


PS-另一个注意事项是,我是否必须将每个web.config中的名称空间引用放在每个/Views目录下(例如,在每个单独的区域中),以及根目录下?为什么我不能把它放在根目录或根/视图目录中?

你不应该把html助手扩展方法放在应用程序代码中。asp.net:教程虽然有点老,但对您的指导相当不错


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

app\u code文件夹仍然是一个特殊文件夹,由项目自动编译和引用。

是否检查了在HtmlHelper类上生成的命名空间当你把它放在应用程序代码之外的文件夹中时


可能您遗漏的只是@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引用命名空间的情况下使用帮助程序。

这是一个网站“项目”吗?如果是,请使用web应用程序项目尝试此操作。此项目是使用Visual Studio 2012中的ASP.NET Internet应用程序模板启动的。您可以将命名空间引用放在应用程序根目录的web.config中,或者(甚至更好)在~/Views/文件夹根目录下的Web.config中,与MVC引用的默认视图一起。配置将由任何子目录继承。确定。这正是我所想的!那么,你能解释一下我看到的行为吗?和我做的一样,只需创建一个文件夹,将下面的句子添加到视图文件夹中的web.config中,或者添加一个@using语句。你能共享项目文件夹,让我们看一看吗?