基于控制器结构的MVC自定义视图路由
MVC custom view routing based on controller structure
我需要 ASP.NET MVC5 视图结构来反映我的控制器结构。
我的应用程序的控制器具有以下结构:
Controllers
|--- Main
| |--- HomeController.cs
|--- User
| |--- HomeController.cs
| |--- SettingsController.cs
|--- Admin
| |--- HomeController.cs
| |--- ManageController.cs
控制器结构基于用户类型,所有用户都可以访问 Main
控制器。我的网址是这样的:
/Main/Home
(默认)
/User/Settings
/Admin/Manage/Users
但是正如您所看到的,所有命名空间都有一个 HomeController
,但是当我想为 User/HomeController
创建一个索引视图时,它将被放置在 Views/Home/Index.cshtml
中。但我实际上需要这个视图在这里:Views/User/Home/Index.cshtml
。下面是我需要如何构建视图的示例结构。
Views
|--- Main
| |--- Home
| | |--- Index.cshtml
| | |--- Contact.cshtml
|--- User
| |--- Home
| | |--- Index.cshtml
| |--- Settings
| | |--- Index.cshtml
|--- Admin
| |--- Home
| | |--- Index.cshtml
| |--- Manage
| | |--- Index.cshtml
| | |--- Users.cshtml
我尝试使用自定义 RazorViewEngine
,但我能找到的所有示例 (like this one) 都不适合我的情况。有没有办法通过自定义路由实现这种特定结构?
我相信您正在寻找区域。
区域在 MVC 4 中可用。在 MVC 5 中没有区别。
如果区域不适合您,您可以指定所需的任何路径而不是使用默认路径:
return View("user/home/index", model);
正如其他人所指出的,您可以使用区域来构建您的网站(前提是您只需要 1 层)。
如果您想要多级控制器 (/section1/sectiona/SomeController.cs
),请查看 MvcCodeRouting。
我需要 ASP.NET MVC5 视图结构来反映我的控制器结构。
我的应用程序的控制器具有以下结构:
Controllers
|--- Main
| |--- HomeController.cs
|--- User
| |--- HomeController.cs
| |--- SettingsController.cs
|--- Admin
| |--- HomeController.cs
| |--- ManageController.cs
控制器结构基于用户类型,所有用户都可以访问 Main
控制器。我的网址是这样的:
/Main/Home
(默认)/User/Settings
/Admin/Manage/Users
但是正如您所看到的,所有命名空间都有一个 HomeController
,但是当我想为 User/HomeController
创建一个索引视图时,它将被放置在 Views/Home/Index.cshtml
中。但我实际上需要这个视图在这里:Views/User/Home/Index.cshtml
。下面是我需要如何构建视图的示例结构。
Views
|--- Main
| |--- Home
| | |--- Index.cshtml
| | |--- Contact.cshtml
|--- User
| |--- Home
| | |--- Index.cshtml
| |--- Settings
| | |--- Index.cshtml
|--- Admin
| |--- Home
| | |--- Index.cshtml
| |--- Manage
| | |--- Index.cshtml
| | |--- Users.cshtml
我尝试使用自定义 RazorViewEngine
,但我能找到的所有示例 (like this one) 都不适合我的情况。有没有办法通过自定义路由实现这种特定结构?
我相信您正在寻找区域。
区域在 MVC 4 中可用。在 MVC 5 中没有区别。
如果区域不适合您,您可以指定所需的任何路径而不是使用默认路径:
return View("user/home/index", model);
正如其他人所指出的,您可以使用区域来构建您的网站(前提是您只需要 1 层)。
如果您想要多级控制器 (/section1/sectiona/SomeController.cs
),请查看 MvcCodeRouting。