If you want to have special views for specific controllers, in your case you want ProductController views to go to the MyProduct folder, you need to redefine the FindView and FindPartialView RazorViewEngine :
public class MyRazorViewEngine : RazorViewEngine { public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) { if (controllerContext.Controller is ProductController) { string viewPath = "/Views/MyProduct/" + viewName + ".cshtml"; return base.FindView(controllerContext, viewPath, masterName, useCache); } return base.FindView(controllerContext, viewName, masterName, useCache); } public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { if (controllerContext.Controller is ProductController) { string partialViewPath = "/Views/MyProduct/Partials/" + partialViewName + ".cshtml"; return base.FindPartialView(controllerContext, partialViewPath, useCache); } return base.FindPartialView(controllerContext, partialViewName, useCache); } }
And if you might want to add βMyβ to each folder with the controller view, your view mechanism should look like this:
public class MyRazorViewEngine : RazorViewEngine { public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) { string viewPath = "/Views/My" + GetControllerName(controllerContext) + "/" + viewName + ".cshtml"; return base.FindView(controllerContext, viewPath, masterName, useCache); } public override ViewEngineResult FindPartialView(ControllerContext controllerContext, string partialViewName, bool useCache) { string partialViewPath = "/Views/My" + GetControllerName(controllerContext) + "/Partials/" + partialViewName + ".cshtml"; return base.FindPartialView(controllerContext, partialViewPath, useCache); } private string GetControllerName(ControllerContext controllerContext) { return controllerContext.RouteData.Values["controller"].ToString(); } }
And than in your Global.asax
protected void Application_Start() {