MVC自定义视图路由基于控制器结构

时间:2016-05-30 14:26:01

标签: c# asp.net-mvc model-view-controller url-routing asp.net-mvc-routing

我需要我的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)都不适用于我的情况。有没有办法通过自定义路由实现这种特定的结构?

3 个答案:

答案 0 :(得分:2)

我相信你正在寻找地区。

MVC 4中的区域是可用的.MVC 5没有区别。

Here you can find a details

答案 1 :(得分:1)

正如其他人所指出的那样,您可以使用区域来构建您的网站(前提是您只想要1级)。

如果您需要多个级别的控制器(/section1/sectiona/SomeController.cs),请查看MvcCodeRouting

答案 2 :(得分:0)

如果区域不适合您,您可以指定所需的路径而不是使用默认路径:

return View("user/home/index", model);