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

时间:2013-04-07 00:23:20

标签: c# asp.net-mvc-4

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

给定文件结构:

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

我希望我的网址如下:

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

我的路线设置与我的CompaniesAreaRegistration类一样。

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

结果:

  • /公司 - 作品
  • / Companies / Edit - 404
  • / Companies / Default / Edit - Works
  • / Companies / Test - Works
  • / Companies / Test / Test - Works

如何在URL中没有“默认”的情况下访问我的DefaultController.Edit()操作?

更新

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

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

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

如果我在HomeController上有一个名为“Test”的动作,我可以使用URL / Test来触发该动作。我没有必要添加一个像“/ Test / {id}”这样的URL的新路由,以便它可以工作。它似乎忽略了URL的{controller}部分并使用默认的控制器配置。

为什么在区域中执行此操作会更改此行为?

区域路由与默认路由完全相同,但URL的“公司/”前缀除外。

作为测试,我将默认路由网址更改为url: "Example/{controller}/{action}/{id}",我仍然能够通过URL /Example/Test访问HomeController.Test()。

1 个答案:

答案 0 :(得分:2)

使用:

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

请记住参数从左到右填充(不能跳过{controller}并且只填充{action}。如果您想要{controller},请在{defaults中指定1}})