当我调用控制器时,我有一个名为 DummyController 的控制器,就像DummyController/Index
我想要将此控制器调用为maincontroller/dummycontroller/index
,其中mainController
是完全不同的控制器。
DummyController的代码:
public ActionResult Index()
{
return View("~/Views/main/dummy/index.cshtml",db.Users.ToList());
}
虚拟控制器的索引文件的位置是main/dummy
现在的问题是,当我调用虚拟控制器的索引页面时,我得到的网址为dummy/index
我希望网址显示为main/dummy/index
。
有没有办法创建子控制器? o仅为特定控制器更改URL
答案 0 :(得分:0)
一旦我遇到一个简单的问题,这是相对简单的。
使用[RoutePrefix("")]
&的组合[Route("")]
在我的控制器上,我能够完成这项工作。属性路由需要在Global.asax.cs routes.MapMvcAttributeRoutes()
方法中调用RegisterRoutes()
。
[RoutePrefix("main/dummy")]
[Route("{action=index}/{id:long?}")]
{action=index}
定义路由的动作处理,并指定/ index作为默认动作,如果没有提供(即〜/ main / dummy /将渲染〜/ main / dummy / index {id:long?}
指定id路由属性
:long
是将参数约束为long
数据类型的语法?
表示此参数是可选的。 (more on this here)这也可以使用标准MapRoute()
技术完成:
routes.MapRoute(
name: "DummyControllerRoute",
url: "main/dummy/{action}/{id}",
defaults: new { controller = "Dummy", action = "Index", id = UrlParameter.Optional });
<小时/> 我忘了添加我的简单问题.. 我在控制器中有两个操作:
Index()
和Index(id)
,它们总是会产生AmbiguousRouteException
,并让我相信我的路线定义不正确。将其更改为View(id)
解决了它。 (我从技术上讲,路线 是错误的,但我不需要花费更多时间试图让它以这种方式工作)