如何向 Razor 页面添加额外的名称空间,而不是使用@声明?

是否需要使用某种魔法来获得 webconfig 中 pages/namespaces元素中的名称空间?

<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放在我所有页面的顶部

49671 次浏览

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

更新 : 请看一下我更新的适用于 MVC 3 RC 的答案: 未找到 Razor HtmlHelper 扩展(或其他视图名称空间)

这在 MVC3Preview 1和 MVC3Beta (今天刚刚发布)之间发生了变化。在 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>

注意 ,您可能需要关闭并重新打开该文件,以便编辑器选择更改。

请注意,在 web.config 中还需要对 Razor 在 MVC3 Beta 中的工作进行其他更改,因此您最好查看一下在 Beta 项目模板中提供的 ~\View\Web.config文件。

我找到了这个 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 之前执行

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

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

这样,只要引用包含该类的库,所有内容都将看到它。因为要扩展 System.Web.Mvc类,所以将扩展方法放在同一个名称空间中似乎是可以接受的。

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

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

看这里:

NET MVC 4名称空间在剃刀视图中的问题