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((。
使用:
context.MapRoute(
name: "Companies_Edit",
url: "Companies/Edit/{id}",
defaults: new { controller = "Default", action = "Edit", id = UrlParameter.Optional }
);
请记住,参数是从左到右填充的(不能跳过{controller}
,只能填充{action}
。如果希望假设{controller}
,请在defaults
中指定(