ホームページ > バックエンド開発 > C++ > ASP.NET MVCの[検索場所の表示]をカスタマイズするにはどうすればよいですか?

ASP.NET MVCの[検索場所の表示]をカスタマイズするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-26 01:01:10
オリジナル
626 人が閲覧しました

How Can I Customize View Search Locations in ASP.NET MVC?

ASP.NET MVC でのビューの検索位置をカスタマイズする

ASP.NET MVC は、デフォルトでは、特定の Views フォルダー階層内のビューを検索します。ただし、名前空間に基づいてビューを整理する場合など、場合によっては、ビューの検索場所をカスタマイズする必要があります。

問題の説明

次のプロジェクト構造を考えてみましょう:

<code>- Controllers
  - Demo
    - DemoArea1Controller
    - DemoArea2Controller
- Views
  - Demo
    - DemoArea1
      - Index.aspx
    - DemoArea2
      - Index.aspx</code>
ログイン後にコピー

「Demo」名前空間 (例: DemoArea1Controller) のコントローラーにアクセスすると、MVC はデフォルトで /Views/DemoArea1 サブフォルダー内のビューを検索します。ただし、「ビュー 'インデックス' またはそのマスター ページが見つかりません」というエラーが表示されます。

解決策

ビューの検索位置をカスタマイズするには、WebFormViewEngine クラスを拡張することをお勧めします:

<code class="language-csharp">public class CustomViewEngine : WebFormViewEngine
{
    public CustomViewEngine()
    {
        var viewLocations = new[] {
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx",
            "~/AnotherPath/Views/{0}.ascx"
            //等等
        };

        this.PartialViewLocationFormats = viewLocations;
        this.ViewLocationFormats = viewLocations;
    }
}</code>
ログイン後にコピー

ここでは、カスタム ビューの検索場所を含む配列を定義します。

登録

カスタム ビュー エンジンを作成した後、それを Global.asax.csApplication_Start メソッドに登録する必要があります:

<code class="language-csharp">protected void Application_Start()
{
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new CustomViewEngine());
}</code>
ログイン後にコピー

デフォルトのビュー エンジンをクリアしてカスタム エンジンを追加すると、コントローラが指定された場所でビューを検索するように効果的に指定できます。

この改訂された出力は、元のイメージを維持し、同様の意味を実現するためにテキストを言い換えていますが、コード例は変更されていません。

以上がASP.NET MVCの[検索場所の表示]をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート