【发布时间】:2018-02-01 18:39:29
【问题描述】:
我有一个不想使用任何“文件夹”的应用程序。 EG
http://mydomain/Index , http://mydomain/Edit , http://mydomain/Admin , 等等……
我最初将我的默认 RouteConfig 修改为如下所示:
routes.MapRoute(
name: "maproute1",
url: "{action}/{id}",
defaults: new { controller = "Home", id = UrlParameter.Optional }
);
我有一个 Views/Home 文件夹,其中包含我的所有视图。
它就像一个魅力,所以每当我输入动作名称时,我都没有任何问题。
如果,假设,我想保持这个 url 结构相同,我只显示根域/操作页面......并且我想让其中一些操作使用一个控制器 (HomeController.cs) 和其他操作(例如管理员)使用另一个控制器(AdminController),有没有办法我可以修改我的路线说......好的..如果操作是“Admin”然后使用AdminController?我设置了 AdminController,并定义了“Admin”的操作。我尝试像这样更改我的路由配置:
routes.MapRoute(
name: "maproute1",
url: "{action}/{id}",
defaults: new { controller = "Home", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "maproute2",
url: "{action}/{id}",
defaults: new { controller = "Admin", id = UrlParameter.Optional }
);
然后我为管理员视图(以及我想要的其他一些操作/视图)设置了一个 Views/Admin 文件夹
但它不起作用。 IF 我在家庭控制器中有一个“管理员”操作,它从家庭控制器触发。但我希望从 AdminController 触发该操作。请记住,我不仅要使用 ActionLinks 导航到这些页面,因此我不能只使用 Actionlink 并指定控制器。有些人会通过直接的 URL/书签访问链接。
如果我想保持这样的 URL 结构 (http://mydomain/Action),我 可以 将我的所有操作放入一个单独的控制器中,这样就可以了,但我希望我的代码保持整洁,所以一个控制器处理与一组模型相关的功能,另一个控制器处理与另一组模型相关的功能。现在看来,我要么必须(a)拥有一个越来越大的 MASSIVE 控制器,要么(b)我必须有一个更详细的路径来告诉 MVC 使用哪个控制器。
(顺便说一句,我不能使用查询字符串...长篇大论...不要问)
据我所知,MVC 旨在让人们更好地控制布局。我从事 Web 表单程序员已有 13 年了,但到目前为止,MVC 似乎以牺牲您在其他领域的控制权为代价来做到这一点。
【问题讨论】:
-
不,您不能(除非您为每个操作创建了特定的路由定义)。如果您没有在 url 中识别控制器(或它的别名),那么服务器如何知道要调用哪个控制器 - 它不是通灵的!
-
为每个操作创建特定路线是我会尝试的解决方案(例如在下面的答案之一中)。
标签: asp.net-mvc asp.net-mvc-routing