以前に ASP.NET MVC に別アセンブリでコントローラーを追加する(Razorページ)記事を書きました。
概要としては
- ASP.NET MVC プロジェクトにルート設定があり
- そのルート設定に合ったコントローラークラスを別アセンブリ上に作成
- 実行環境にアセンブリを配置
- 実行環境の Views フォルダの適切な位置に .cshtml を配置
■ .cshtml を配置するディレクトリを変えたい
ASP.NET MVC プロジェクトに手を入れずに、Controller クラス + .cshtml を追加するので、可能であれば .cshtml を配置するフォルダをトップレベルのフォルダから分けたい。そう考えました。実現には Controller の名前から cshtml が自動で読まれるパスとは異なるパスをどこかで設定する必要があります。そのための View メソッドのオーバーロードが Controller クラスにあります。
using System.Web.Mvc; namespace WebApplication2.Controllers { public class HomeController : Controller { public ActionResult About() { ViewBag.Message = "Your application description page."; return View("../../Views2/Home3/About"); } } }
これで、~/View2/Home3/
配下の About.cshtml
が使われます。
Web.config を配置
ただし、ただフォルダを作って .cshtml を置いただけでは動作しませんでした。
~/Views/Web.config
ファイルを ~/Views2/
へコピーしました。これがないと実行時に
CS0103: The name 'ViewBag' does not exist in the current context
といったエラーになります。