2017-12-21 9 views
0

私はASP.NET Core 2.0アプリケーションを使用していますが、ビューがビューの外で使用するレイアウトページを設定しようとしています。そうすれば、すべての私の意見のために、同じコードを上から繰り返し続ける必要はありません。ASP.NETコア - ビューの外にレイアウトページを設定

私は、コンストラクタの中でそれを設定し、次の基本クラスからの私のすべてのビューを継承することによって、これを達成することができます:

public class RazorPage<TModel> : Microsoft.AspNetCore.Mvc.Razor.RazorPage<TModel> { 
    public RazorPage() { 
     var theme = "Theme1;" 
     Layout = $"~/Areas/{theme}/Views/Shared/_Layout" + RazorViewEngine.ViewExtension; 
    } 
} 

しかし、これは、現在のURLに基​​づいて、テーマの変更の名前を正常に動作します。私は現在のコンテキストにアクセスすることでこれを行うことができると考えましたが、コンストラクタ内でContextプロパティを呼び出すと、nullが返されます。

Layoutプロパティを設定して現在のリクエストコンテキストにアクセスできる適切な方法が表示されません。

他の方法を知っている人はいますか?

私は_ViewImports/_ViewStartファイルでこれを実現できることを認識していますが、アプリケーションの構造上、ファイルが重複している必要があり、自分のビュー内にビジネスロジックを持つのが好きではありません。

+1

多分、IViewLocationExpanderで始まる、https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.razor.iviewlocationexpander?view=aspnetcore-2.0 –

答えて

0

私は、現在のURLに基​​づいて変化する私のテーマの共有ビューを探す場所を指定するために、IViewLocationExpander(@ valery.sntxの提案)を使用しました。

私はその後、自動IFileProviderを使用して_ViewStartファイルを生成し、単にそれはへのコンテンツです設定:

@{ 
    Layout = "_Layout"; 
} 

2番目の部分はオプションですが、それが原因自分のアプリケーションの方法に複数の_ViewStartファイルを作成することから私を救いました設計されて。

関連する問題