2017-07-31 7 views
0

ASP.NET Core MVCアプリケーションでフィーチャーフォルダー構造を使用する方法について、articleを読んだことがあります。私の計画は、フィーチャー・フォルダー構造を使用してWebアプリケーションをより良い方法で整理することです。私はarticleを踏襲していると私は、次のようなIViewLocationExpanderを実装ASP.NET Core MVC:パーシャルビューがカスタムフィーチャーフォルダ構造内に見つかりませんでした

... 
wwwroot 
Claims 
    Controllers 
    Services 
    Views 
     Shared 
Map 
... 

public class MyViewLocationExpander : IViewLocationExpander 
{ 
    public void PopulateValues(ViewLocationExpanderContext context) 
    { 
     context.Values["customviewlocation"] = nameof(MyViewLocationExpander); 
    } 

    public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations) 
    { 
     var viewLocationFormats = new[] 
     { 
      "/Claims/Views/{0}.cshtml", 
      "/Claims/Views/Shared/{0}.cshtml" 
     }; 
     return viewLocationFormats; 
    } 
} 

私は「/に私のメインのClaims.cshtmlビューを置き、すべての まず私のフォルダ構造を見ることができますクレーム/ビュー/ "フォルダ。私Claims.cshtmlの初めに、私は私の部分図描画するために、次の行にあります。_NewClaimPopup.cshtmlについては

@Html.Partial("_NewClaimPopup"); 

を、それはパス「/クレーム/閲覧/共有」にそれを置きました。 http://localhost:13078/Claims/Claims

InvalidOperationException: The partial view '_NewClaimPopup' was not found. The following locations were searched: 
/Views/Claims/_NewClaimPopup.cshtml 
/Views/Shared/_NewClaimPopup.cshtml 

カスタムパスが成功しIViewLocationExpanderの実装によって追加されたようだ。しかし残念ながら、私は、以下のURLを取得しようとすると、次の例外が発生しました。

追加に関する情報:

  1. 私は何もしようとしたことIViewLocationExpanderの実装のパスで "〜" 記号なので、使用することです: "〜/クレーム/ビュー/ {0} .cshtml" と「〜を/Claims/Views/Shared/{0}.cshtml "しかし、それは助けにはなりません。
  2. が、私は私の部分図を描画するための絶対パスを使用しようとしましたが、まだ何も

    @ Html.Partial( "" 〜/クレーム/ビュー/ _NewClaimPopup.cshtml ");

そして、もちろん、私はStartup.csで私のエキスパンダーを登録:

services.Configure<RazorViewEngineOptions>(options => options.ViewLocationExpanders.Add(new MyViewLocationExpander())); 

なく、少なくとも最後に、私は私のプロジェクトの構造についての画像を添付: enter image description here

他のアイデアはありますか?助けをあらかじめありがとう!

+0

起動時にカスタムロケーションエクスパンダを登録しましたか? – Rohit

+0

@Rohitよろしくお願いします。コメントありがとう。はい、私はそれを登録しました。 (私はそれで私の質問を更新しました) – mirind4

+0

私はあなたの構造ごとに正確に試しましたが、私の最後にはうまくいきます。あなたのビューの名前などは正しいですか?プロジェクト構造のスクリーンショットを共有できますか? – Rohit

答えて

1

サンプルアプリケーションを作成しました。以下のリンクからダウンロードできます Custom View Location

+0

ありがとう、私は仕事から家に帰るときにそれをチェックするつもりだ;) – mirind4

+1

私はそれが働いた、多くのありがとう!唯一の欠点は、 "@ {Layout ="〜/ Views/Shared/_Layout "}を追加する必要があることです。cshtml ";}" .cshtmlファイルのすべての冒頭に。または、私は欲しくない巨大な複製であるすべてのビューフォルダに_Layout.cshtmlを配置します。多分どんな考えですか? – mirind4

+2

Claims/Sharedフォルダに_Layoutファイルを追加し、Claimsフォルダに他のファイル_ViewStart.cshtmlを追加し、そのファイルにレイアウト参照を '@ { Layout =" _Layout "; } 「 – Rohit

関連する問題