我正在尝试执行自定义路由,因此可以在应用程序中为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/

10-12 14:54
查看更多