ビュー ディレクトリの名前付けとファイルの名前付けは重要です。これは、ASP.NET MVC フレームワークがそれらについて特定の前提を置いているためです。これらの仮定に従わない場合は、コードを記述して、何をしているのかをフレームワークに知らせる必要があります。一般的に言えば、そうしない正当な理由がない限り、これらの仮定に従う必要があります。
最も単純なコントローラ アクションを見てみましょう。
public ActionResult NotAuthorized()
{
return View();
}
View() の呼び出しでビュー名が指定されていないため、フレームワークはビュー ファイル名がアクション名と同じであると想定します。フレームワークには、拡張機能を提供する ViewEngine と呼ばれるタイプがあります。デフォルトの ViewEngine は WebFormViewEngine で、その名前に .aspx を追加します。したがって、この場合の完全なファイル名は NotAuthorized.aspx になります。
しかし、ファイルはどのフォルダーにありますか? ここでも、ViewEngine がその情報を提供します。WebFormViewEngine を使用すると、~/Views/Shared と ~/Views/{controller} の 2 つのフォルダーが表示されます。
したがって、コントローラーが AccountController と呼ばれる場合、~/Views/Account を参照します。
しかし、これらのルールに従いたくない場合もあります。たとえば、2 つの異なるアクションが同じビュー (異なるモデルなど) を返す場合があります。この場合、アクションでビュー名を明示的に指定すると、次のようになります。
public ActionResult NotAuthorized()
{
return View("Foo");
}
WebFormViewEngine では、「ビュー名」は通常、拡張子を除いたファイル名と同じですが、フレームワークは他のビュー エンジンのそれを必要としません。
同様に、アプリケーションでビューや既定以外のフォルダーを探す必要がある場合もあります。これを行うには、独自の ViewEngine を作成します。このブログ投稿で手法を示していますが、以前のバージョンのフレームワーク用に記述されているため、型名が異なります。ただし、基本的な考え方は同じです。