Was Sie wirklich hier wollen, ist für Hierarchie Ihre Ansichten Ordner, um die Namespace-Hierarchie Ihrer Controller übereinstimmen. Sie können eine benutzerdefinierte ViewEngine schreiben, um dies relativ einfach zu tun - siehe meine ControllerPathViewEngine project on GitHub für Details.
Ich habe ein Snippet der ControllerPathRazorViewEngine-Klasse eingefügt, um darzustellen, wie es funktioniert. Durch das Abfangen der FindView/FindPartialView-Methoden und das Ersetzen des Controllernamens durch einen Ordnerpfad (basierend auf Controller-Namespace und Name) können wir es dazu bringen, Ansichten aus verschachtelten Ordnern im Hauptordner Views zu laden.
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;
}
}
Mann, ich bin schnell genug NIE !! – Portman