あなたが本当にここにしたいことは、あなたのコントローラーの名前空間の階層に合わせて、あなたのビューのフォルダ階層のためです。これを簡単に行うためにカスタムViewEngineを書くことができます - 詳細はControllerPathViewEngine project on GitHubをご覧ください。
ControllerPathRazorViewEngineクラスのスニペットを使用して、その動作を説明しました。 FindView/FindPartialViewメソッドをインターセプトし、コントローラ名を(コントローラの名前空間と名前に基づいて)フォルダパスに置き換えることで、メインのViewsフォルダ内のネストされたフォルダからビューをロードすることができます。
public class ControllerPathRazorViewEngine : RazorViewEngine
{
//... constructors etc.
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
return FindUsingControllerPath(controllerContext,() => base.FindView(controllerContext, viewName, masterName, useCache));
}
public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache)
{
return FindUsingControllerPath(controllerContext,() => base.FindPartialView(controllerContext, partialViewName, useCache));
}
private ViewEngineResult FindUsingControllerPath(ControllerContext controllerContext, Func<ViewEngineResult> func)
{
string controllerName = controllerContext.RouteData.GetRequiredString("controller");
string controllerPath = controllerPathResolver.GetPath(controllerContext.Controller.GetType());
controllerContext.RouteData.Values["controller"] = controllerPath;
var result = func();
controllerContext.RouteData.Values["controller"] = controllerName;
return result;
}
}
マンであり、この記事で説明すると、私はNEVER十分な速さです! – Portman