2015-09-19 9 views
5

Asp .Net 5 beta 6の場合、ビューがViewsフォルダの外側にある場合、タグヘルパは解決されません。私が望むフォルダ構造は、ファイルタイプではなく関数に基づいたものです。私が望む特定の機能のコントローラ、ビューモデル、およびビューは、コントローラ名を反映するフォルダ内にグループ化されています。ここで私は、プロジェクトに希望のフォルダ構造の例である:ビューがViewsフォルダの外にあるときにタグヘルパーが解決しない

UI 
    - Account 
     - AccountController.cs 
     - AccountViewModels.cs 
     - Login.cshtml 
     - Register.cshtml 
    - Students 
     - StudentsController.cs 
     - StudentsViewModels.cs 
     - CaptureStudent.cshtml 

これを実現するために、私は、カスタムビューのエンジンを作成しました:

次のように私は startup.csに登録
public class CustomUIViewEngine : RazorViewEngine 
{ 
    public CustomUIViewEngine(IRazorPageFactory pageFactory, 
     IRazorViewFactory viewFactory, 
     IOptions<RazorViewEngineOptions> optionsAccessor, 
     IViewLocationCache viewLocationCache) : 
     base(pageFactory, viewFactory, optionsAccessor, viewLocationCache) 
    { 
    } 
    public override IEnumerable<string> ViewLocationFormats 
    { 
     get 
     { 
      var viewLocationFormats = base.ViewLocationFormats 
      .Union(new string[] { "~/UI/{1}/{0}.cshtml" }); 
      return viewLocationFormats; 
     } 
    } 
} 

services.AddMvc().ConfigureMvcViews(options => 
     { 
      options.ViewEngines.Clear(); 
      options.ViewEngines.Add(typeof(CustomUIViewEngine)); 
     }); 

tag helpersが正しくレンダリングされていないという唯一の問題で、このカスタムビューエンジンが機能し、ビューが配置されレンダリングされます。ので、代わりにこれを見てのD:

<form method="post" class="form-horizontal" role="form" action="/Account/Login"> 

私はレンダリングされたソースでこれを見ています:

<form asp-controller="Account" asp-action="Login" method="post" class="form-horizontal" role="form"> 

は誰でもビューがビューフォルダの外に配置されたときにtag helpersが正しくレンダリングされていない理由を知っていますAsp.Net 5ウェブアプリケーションでこれを修正する方法がある場合は、

答えて

2

はあなたのTHの_ViewImportsファイル内の追加、およびのでが認識されステートメントを使用している場合はありますか? @ addTagHelperを直接ビューに追加しようとしましたか?

このうちのいくつかは、Authoring Tag Helpersに記載されています。 私は、今後の記事で追加、削除する継承階層について詳しく説明します。

+1

ヘルプRickAndに感謝します。 :)はい、@ addTagHelperディレクティブをビューに追加すると、_ViewImportsフォルダーをデフォルトの場所から自分のUIフォルダーのルートに移動したように問題が解決されました。問題が解決しました。ありがとう! – BruceHill

+0

@BruceHill素晴らしい。これを答えられた質問としてマークしてもよろしいですか? – RickAndMSFT

+1

デフォルトのプロジェクト構造を使用していない場合(たとえば、すべてのビューが共通の 'Views'フォルダの下にない場合など)、' _ViewImports'で可能なファイルの場所に関するドキュメントをドキュメントに含めると便利です。プロジェクトのルートに '_ViewImports'を置くと、すべてのフォルダのすべてのビューに適用されるように見えるので、これはそのシナリオを処理しますが、ドキュメントは現在それをカバーしていないようです。 – cbranch

関連する問題