我有一个公司区域的MVC4应用程序。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 }
);
结果:
- /公司 - 工程
- /公司/编辑 - 404
- /公司/默认/编辑 - 工程
- /公司/测试 - 作品
- /公司/测试/测试 - 工程
如何在URL中访问我的DefaultController.Edit()动作而没有“默认”?
更新
基于Brad的回答,我知道我可以硬编码这样的路径,它会工作。我真的希望有更多的自动解决方案。我不知道我将在某个区域的默认控制器上执行多少操作。我不想为每个人创建一条新路线。
这是作为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更改为url: "Example/{controller}/{action}/{id}"
,并且我仍然能够通过URL/Example/Test访问HomeController.Test()。
我只是想补充说,这应该添加到路由表中,而不是替换现有的路由表。此外,添加时,它应该高于您当前使用的默认路由,因为它是更具体的路由。 – Tommy 2013-04-07 02:45:51
感谢您的回答,但我会考虑这种解决方法。在非区域默认控制器中不需要新路线来使其工作。默认路由(由MVC模板添加的路由)可以很好地访问DefaultController上的操作,而无需在URL中指定控制器名称。我更新了我的问题,提供了更多关于令我感到困惑的细节。 – AndrewR 2013-04-07 04:07:33