web-dev-qa-db-ja.com

@using宣言の代わりに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>
_

上記のdoes n'tは動作したいだけです。 _@using MyCustomHelpers_をページの先頭に配置すると、魔法のように機能するため、名前空間が適切であることを知っています。

これは、すべてのページの先頭に_@using_を置くことなく、Html.SomeFunction()を機能させることができるようにするためです。

145
MyNameIsJob

Update:MVC 3 RCに適用される更新された回答をご覧ください: Razor HtmlHelper Extensions(またはビューの他の名前空間)Not見つかった

これは、MVC 3 Preview 1とMVC 3 Beta(今日リリースされた)の間で変更されました。プレビュー1では、RazorはWebForms名前空間の構成セクションを使用しました。ただし、ベータ版には、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ベータ版で動作させるためにweb.configで必要なものに他の変更があることに注意してください。したがって、~\View\Web.config Betaプロジェクトテンプレートに同梱されているファイル。

162
marcind

名前空間宣言をルートの「Views」フォルダーおよび/または現在の領域の「Views」フォルダーのWeb.configに配置すると(ビューの場所に応じて)、期待どおりに動作するはずです。

50
Buildstarted

私はこれを見つけました 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")]

global.asaxのApplication_Startの前にInitializeApplicationメソッドが実行されます

6
k-dev

価値のある別の手法として、ヘルパーエンジン拡張クラスを、既定でビューエンジンに既に含まれているSystem名前空間に配置するだけです。例えば:

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

このように、クラスを含むライブラリが参照されている限り、すべてがそれを見ることができます。 System.Web.Mvcクラスを拡張しているので、同じ名前空間に拡張メソッドを配置することは合理的に受け入れられるようです。

4
Peter

ビューのルートでweb.configに変更が加えられたことを確認してから、ビューを閉じて再度開いてみてください。

閉じて再開すると、問題が解決しました。

こちらをご覧ください:

カミソリビューでのASP.NET MVC 4名前空間の問題

0
eaglei22