MVC中奇怪的路由行为

时间:2016-07-25 07:19:36

标签: html asp.net-mvc url-routing html-helper

请考虑以下侧栏:

enter image description here

如果我按下菜单项All solutions下的子菜单项Solutions,我会看到一个类似这样的网格:

enter image description here

此网格的网址为https://something.com/Solutions。现在想象一下,我想进入菜单项Partners和子菜单项Active,网址为https://something.com/Partners/active

我使用简单的Html.ActionLink就像这样:

Html.ActionLink("- Active", "Active", "Partners", null, new { @class = "filter-button" })

问题

使用https://something.com/Partners/active按照我的方式将用户导航到网址Html.ActionLink,这应该可行,但事实并非如此。该应用程序不是将我重定向到活动合作伙伴视图,而是将我重定向回https://something.com/Solutions我来自的确切位置),但使用此网址:https://something.com/Solutions?undefined=undefined

如果我再次按下菜单项Active中的Partners子菜单项,则网址会更改为https://something.com/Solutions?undefined=undefined&undefined=undefined,这将永远持续下去。

我不知道为什么会这样,也没有任何解决方案。

PARTNERS / ACTIVE

public ActionResult Active()
{
    using(var db = new DatabaseContext())
    {
        var partners = db.Partners.Where(x => x.Active).ToList();

        return View(partners);
    }
}

ROUTE DEFINITIONS

routes.MapRoute(
    name: "ControllerIdActionId",
    url: "{controller}/{id}/{action}/{id2}",
    defaults: new { id2 = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Solutions",
    url: "{controller}/{id}/{action}/",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

更新

在查看路径定义后,我注意到路径定义Solutions从未使用过。我现在删除了该路由定义,因此路由定义如下所示:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "ControllerIdActionId",
    url: "{controller}/{id}/{action}/{id2}",
    defaults: new { id2 = UrlParameter.Optional }
);

但这没有任何区别。我尝试更改两条路线,以便在ControllerIdActionId之前注册Default路线,但这也没有效果。

1 个答案:

答案 0 :(得分:0)

路线的顺序很重要。请更改路线的顺序。将Default路线移至第1位并尝试。

此外,路线ControllerIdActionIdSolutions需要改进,它们看起来不合时宜。请尽量遵循一定的模式以避免并发症。

E.g。 Controller/Action/ID