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
ウェブアプリケーションでこれを修正する方法がある場合は、
ヘルプRickAndに感謝します。 :)はい、@ addTagHelperディレクティブをビューに追加すると、_ViewImportsフォルダーをデフォルトの場所から自分のUIフォルダーのルートに移動したように問題が解決されました。問題が解決しました。ありがとう! – BruceHill
@BruceHill素晴らしい。これを答えられた質問としてマークしてもよろしいですか? – RickAndMSFT
デフォルトのプロジェクト構造を使用していない場合(たとえば、すべてのビューが共通の 'Views'フォルダの下にない場合など)、' _ViewImports'で可能なファイルの場所に関するドキュメントをドキュメントに含めると便利です。プロジェクトのルートに '_ViewImports'を置くと、すべてのフォルダのすべてのビューに適用されるように見えるので、これはそのシナリオを処理しますが、ドキュメントは現在それをカバーしていないようです。 – cbranch