子文件夹下的MVC路由
我需要一些路由帮助。 我试图找到现有的问题 - 答案,但没有什么是帮助我。 如果已经有答案,请将其链接。
我的结构:
/Controller
--/Root
----/HomeController.cs
/Views
--/Root
----/Home
------/Index.cshtml
问题是,无法找到Index.cshtml。
没有找到'Index'或其主人的视图。 搜索了以下位置:
〜/浏览/首页/的Index.aspx
〜/浏览/首页/ Index.ascx
〜/查看/共享/的Index.aspx
〜/查看/共享/ Index.ascx
〜/浏览/首页/ Index.cshtml
〜/浏览/首页/ Index.vbhtml
〜/查看/共享/ Index.cshtml
〜/查看/共享/ Index.vbhtml
堆栈跟踪:
System.Web.Mvc.ViewResult.FindView(ControllerContext上下文)+382 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext上下文)+116 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext,ActionResult actionResult)+13系统。 Web.Mvc。<> c__DisplayClass1a.b__17()+23 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter,ResultExecutingContext preContext,Func 1 continuation) +245<br /> System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +22 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList
1 filters,ActionResult actionResult)+176 System.Web.Mvc.Async。<> c__DisplayClass2a.b__20()+75 System.Web。 Mvc.Async。<> c__DisplayClass25.b__22(IAsyncResult asyncResult)+99 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +50 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 System.Web.Mvc.Async.WrappedAsyncResult
1.End() +50 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 System.Web.Mvc.Async.WrappedAsyncResult
1.End()+50 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult的asyncResult)36 System.Web.Mvc.Async。<> c__DisplayClass4.b__3(IAsyncResult的AR)16 System.Web.Mvc.Async.WrappedAsyncResult 1.End() +50 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +16 System.Web.Mvc.Async.WrappedAsyncResult
1.End()+50 System。 Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+28 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9 System.Web.CallHandlerExecutionStep.S ystem.Web.HttpApplication.IExecutionStep.Execute()9721605 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔逻辑completedSynchronously)155
路由是这样的:
routes.MapRoute(
name: "Home",
url: "Root/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
).DataTokens.Add("app", "Home");
有什么我错过了吗?
默认情况下,MVC在~/Views/YourControllerName
文件夹中查找视图。 看起来你的控制器和视图有一个名为root
的目录。 我不知道你为什么想这样做。 如果你这样做是为了在你的项目中合理地组织代码,你应该考虑区域。
您可以创建一个名为root的新区域。 这将在~/Areas
下创建一个名为root的目录。 您可以在其下创建控制器和视图。 当你定义你的路线时,你不需要在你的url中包含Root
这个词,因为你将有一个区域注册以Root开头(你可以自定义)
但是,如果您确实不想使用区域,但希望将视图保留在~/Views/root
目录下,则可以创建自定义视图引擎并指定在哪里查找视图文件。
public class MyCustomViewEngine : RazorViewEngine
{
public MyCustomViewEngine()
{
string[] viewLocationFormatArr=new string[4];
viewLocationFormatArr[0] = "~/Views/root/{1}/{0}.cshtml";
viewLocationFormatArr[1] = "~/Views/Root/{1}/{0}.vbhtml";
viewLocationFormatArr[2] = "~/Views/Shared/{1}/{0}.vbhtml";
viewLocationFormatArr[3] = "~/Views/Shared/{1}/{0}.vbhtml";
this.ViewLocationFormats = viewLocationFormatArr;
string[] masterLocationFormatArr = new string[4];
masterLocationFormatArr[0] = "~/Views/root/{1}/{0}.cshtml";
masterLocationFormatArr[1] = "~/Views/root/{1}/{0}.vbhtml";
masterLocationFormatArr[2] = "~/Views/Shared/{1}/{0}.vbhtml";
masterLocationFormatArr[3] = "~/Views/Shared/{1}/{0}.vbhtml";
this.MasterLocationFormats = masterLocationFormatArr;
string[] partialViewLocationFormatArr = new string[4];
partialViewLocationFormatArr[0] = "~/Views/root/{1}/{0}.cshtml";
partialViewLocationFormatArr[1] = "~/Views/root/{1}/{0}.vbhtml";
partialViewLocationFormatArr[2] = "~/Views/Shared/{1}/{0}.vbhtml";
partialViewLocationFormatArr[3] = "~/Views/Shared/{1}/{0}.vbhtml";
this.ViewLocationFormats = partialViewLocationFormatArr;
}
}
确保在Application_Start事件中注册此自定义视图引擎。
ViewEngines.Engines.Clear();
var ourViewEngine = new MyCustomViewEngine();
ViewEngines.Engines.Add(ourViewEngine);
关于从自定义位置渲染视图的详细博客在这里。
链接地址: http://www.djcxy.com/p/72699.html上一篇: MVC Routing below sub folders
下一篇: Umbraco Cannot render a macro when there is no current PublishedContentRequest