@using宣言の代わりにRazorページに追加の名前空間を追加するにはどうすればよいですか?


146

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しなくてもを機能させることができます


1
MVC 3のどのリリースを使用していますか?
marcind

私はMVC 3プレビューを使用していたので、アップグレード後も他の回答が機能し、引き続き機能します...しかし、あなたの回答は新しいバージョンに適しているようです。恥ずかしい2つの答えを受け入れることはできません。
MyNameIsJob 2010年

回答のコメントからは明確ではありませんが、MVC4では、名前空間をアプリケーションのWeb.Configではなく、\ ViewsフォルダーのWeb.Configファイルに追加する必要があります。<system.web.webPages.razor>configセクションでは、すでにTHATのWeb.Configに存在する必要があります!
ベンマッキンタイア

回答:


163

更新:MVC 3 RCに適用される私の更新された回答を見てください:Razor HtmlHelper Extensions(またはビューの他の名前空間)が見つかりません

これは、MVC 3プレビュー1とMVC 3ベータ(本日リリース)の間で変更されました。プレビュー1では、RazorはWebForms名前空間構成セクションを使用しました。ただし、ベータ版には、WebFormsとは別の新しいconfigセクションがあります。以下を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、ベータプロジェクトテンプレートに付属するファイルを確認することをお勧めします。


2
FWIW、pageBaseType="System.Web.Mvc.WebViewPage"属性も必須であることがわかりました。回答を更新しました。
ポートマン、

1
これはMVC 3 RCの場合と同じですか?
クラーク

1
+1ありがとうございます。今日、私はこの問題の答えを見つけるのに非常に多くの時間を費やしました。
jessegavin 2010年

32
ほとんどの場合、.cshtmlファイルが機能しない場合やエラーが発生した場合は、閉じて再度開く必要があります
Simon_Weaver

1
@Simonはい、更新してファイルを再度開く必要があります。現在、エディターはweb.configの変更を監視していません。
2010

50

ネームスペース宣言をWeb.configルートの「Views」フォルダーおよび/または現在の領域の「Views」フォルダー(ビューがどこにあるかによる)に配置すると、期待どおりに機能するはずです。


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の前に実行されます。


メソッドがSystem.Web.WebPages.Razor.WebCodeRazorHost.AddGlobalImport( "Fully.Qualified.Namespace");に移動しました
agrath 2017

4

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

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

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.