我正在尝试执行自定义路由,因此可以在应用程序中为URL加上所选字符串作为前缀,并在此基础上进行一些处理。我遇到的问题是,生成的操作链接没有根据其存在的URL进行上下文化。
路线:
routes.MapRoute(
"TestRoute",
"TEST/{controller}/{action}/{id}",
new { controller = "Space", action = "Index", id = UrlParameter.Optional });
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Space", action = "Index", id = UrlParameter.Optional });
导航到TEST / Space / Index以及Space / Index都可以,但是我需要解决的奇怪问题是,通过ActionLink生成的链接至少在{controller} / {操作} / {id}默认路由。在TEST / Space / Index列表下加载的页面可以正确链接,但是在加载/ Space / Index时,它们都引用了调用URL所没有的TEST /路由。这是默认行为吗?有没有办法让这些链接在适当的上下文中生成?
编辑:
我看到的第一个地方是没有测试/的Html.BeginForm
Html.BeginForm("ToTheMoon", "Space", FormMethod.Post)
将链接呈现为TEST / Space / ToTheMoon
但它也会显示在链接中:
@Html.ActionLink("Take Me To The Space Port", "SpacePort", "Space")
呈现TEST / Space / SpacePort
最佳答案
我发现了一些解决办法,以确保上下文不会丢失。这就是我要做的工作。
TestRoute对此进行了更改:
routes.MapRoute(
"TestRoute",
"{path}/{controller}/{action}/{id}",
new { controller = "Space", action = "Index", id = UrlParameter.Optional },
new { path = @"TEST" },
new string[] { "The.Namespace" });
在路径上设置约束并将其从路由中删除会使此路由工作。现在,我可以按一下/ TEST / Space / Index,并且从ActionLink生成的所有链接都按预期运行。同样在一个相关的问题上,我最终在映射路线中添加了名称空间规范,因为那里需要开发环境才能将事物正确地路由到TEST路径。
我发现的一些信息是on this page。
关于c# - MVC 3路由和操作链接未遵循预期的上下文路由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9997412/