MVC4区域路由:默认控制器上的操作方法

本文关键字:操作方法 控制器 默认 区域 路由 MVC4 | 更新日期: 2023-09-27 18:07:44

我有一个带有公司区域的MVC4应用程序。

给定的文件结构:

Areas   
'
  Companies
    '
     Controllers
       |
       DefaultController (Contains Index and Edit actions)
       TestController (Contains Index and Test action)

我希望我的URL像:

  • /公司
  • /公司/编辑
  • /公司/测试
  • /公司/测试/测试

我的路线设置与我的CompaniesAreaRegistration类类似。

context.MapRoute(
    name: "Companies_default",
    url: "Companies/{controller}/{action}/{id}",
    defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
            );

结果:

  • /公司-工程
  • /公司/编辑-404
  • /公司/默认/编辑-工作
  • /公司/测试-工程
  • /公司/测试/测试-工程

如果URL中没有"Default",我如何访问DefaultController.Edit((操作?

更新

根据Brad的回答,我知道我可以像这样硬编码路径,它会起作用的。我真的希望有更多的自动解决方案。我不知道我最终会对某些Area的默认控制器执行多少操作。我不想为每个人都创建一条新的路线。

这是作为MVC模板的一部分添加到App_Start/RouteConfig.cs文件中的默认路由。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

如果我在HomeController上有一个名为"Test"的操作,我可以使用URL/Test点击该操作。我不必添加一个URL为"/Test/{id}"的新路由就可以了。它似乎忽略了URL的{controller}部分,并使用默认的控制器配置。

为什么当你在一个区域内做这件事时,这种行为会改变?

区域路由与默认路由完全相同,只是URL的前缀为"Companies/"。

作为测试,我将默认路由URL更改为url: "Example/{controller}/{action}/{id}",并且我仍然可以通过URL/Example/test访问HomeController.test((。

MVC4区域路由:默认控制器上的操作方法

使用:

context.MapRoute(
    name: "Companies_Edit",
    url: "Companies/Edit/{id}",
    defaults: new { controller = "Default", action = "Edit", id = UrlParameter.Optional }
);

请记住,参数是从左到右填充的(不能跳过{controller},只能填充{action}。如果希望假设{controller},请在defaults中指定(