147

我需要使用某种魔法来获取pages/namespaceswebconfig 元素中的命名空间吗?

<pages>
    <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="System.Web.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>

以上只是不想工作。我知道命名空间很好,因为当我把它放在@using MyCustomHelpers页面顶部时,它会神奇地起作用。

这样我就可以开始Html.SomeFunction()工作,而不必放在@using所有页面的顶部

4

5 回答 5

163

更新:请查看适用于 MVC 3 RC 的更新答案:Razor HtmlHelper Extensions (or other namespaces for views) Not Found

这在 MVC 3 Preview 1 和 MVC 3 Beta(今天刚刚发布)之间发生了变化。在 Preview 1 Razor 中使用了 WebForms 命名空间配置部分。然而,在 Beta 中,有一个新的配置部分与 WebForms 是分开的。您需要将以下内容添加到您的 web.config 文件中(或者从模板中的全新项目开始):

<configSections>
  <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
    <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  </sectionGroup>
</configSections>

<system.web.webPages.razor>
  <pages pageBaseType="System.Web.Mvc.WebViewPage">
    <namespaces>
      <add namespace="MyCustomHelpers" />
    </namespaces>
  </pages>
</system.web.webPages.razor>

请注意,您可能需要关闭并重新打开文件才能让编辑器获取更改。

请注意,为了让 Razor 在 MVC3 Beta 中工作,web.config 中需要进行其他更改,因此您最好查看~\View\Web.configBeta 项目模板中附带的文件。

于 2010-10-06T20:04:49.963 回答
50

如果您将命名空间声明放在Web.config根“Views”文件夹和/或当前区域的“Views”文件夹中(取决于您的视图所在的位置) - 它应该可以按预期工作。

于 2010-10-06T17:23:13.407 回答
6

我发现了这个http://weblogs.asp.net/mikaelsoderstrom/archive/2010/07/30/add-namespaces-with-razor.aspx,它解释了如何向所有剃须刀页面添加自定义命名空间。

基本上你可以做到这一点

using Microsoft.WebPages.Compilation;
public class PreApplicationStart
{
   public static void InitializeApplication()
   {
       CodeGeneratorSettings.AddGlobalImport("Custom.Namespace");
   }
}

并将以下代码放入您的 AssemblyInfo.cs

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]

InitializeApplication 方法将在 global.asax 中的 Application_Start 之前执行

于 2011-04-27T04:51:20.683 回答
4

值得一提的是,另一种技术是将您的辅助扩展类简单地放在视图引擎默认已包含的 System 命名空间中。例如:

namespace System.Web.Mvc
{
    public static class HtmlHelper_MyExtensions
    {
        ...
    }
}

这样,只要引用了包含该类的库,一切都会看到它。由于您正在扩展一个System.Web.Mvc类,因此将扩展方法放在同一个命名空间中似乎是可以接受的。

于 2013-07-12T14:21:56.813 回答
0

在确保对视图根目录中的 web.config 进行了更改后,尝试关闭并重新打开视图。

关闭和重新打开解决了我的问题。

看这里:

剃刀视图中的 ASP.NET MVC 4 命名空间问题

于 2016-10-12T21:59:15.340 回答