如何向Razor页面添加额外的命名空间而不是@using声明?

MyN*_*Job 146 razor asp.net-mvc-3

我需要使用某种魔法来获取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>
Run Code Online (Sandbox Code Playgroud)

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

这样我就可以在Html.SomeFunction()不必将@using所有页面放在首位的情况下开始工作

mar*_*ind 163

更新:请查看我更新的适用于MVC 3 RC的答案:Razor HtmlHelper Extensions(或其他视图命名空间)未找到

这已经在MVC 3 Preview 1和MVC 3 Beta(今天发布)之间发生了变化.在预览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>
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你很可能需要关闭并重新打开.cshtml文件,如果它没有工作或给出错误 (32认同)
  • FWIW,我发现`pageBaseType ="System.Web.Mvc.WebViewPage"属性也是必需的.我已经更新了你的答案. (2认同)

Bui*_*ted 50

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


k-d*_*dev 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");
   }
}
Run Code Online (Sandbox Code Playgroud)

并将以下代码放在AssemblyInfo.cs中

[assembly: PreApplicationStartMethod(typeof(PreApplicationStart), "InitializeApplication")]
Run Code Online (Sandbox Code Playgroud)

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