微调MVC3中的路由

时间:2011-09-21 18:00:59

标签: asp.net-mvc-3 routes

我定义了以下路线:

routes.MapRoute(
    "EventInfo", // Route name
    "Events/{year}/{month}/{day}", // URL with parameters
    new { controller = "Events", action = "Index", year = UrlParameter.Optional, month = UrlParameter.Optional, day = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
    "EventType", // Route name
    "Events/Type/{id}/{year}/{month}/{day}", // URL with parameters
    new { controller = "Events", action = "Type", id = UrlParameter.Optional, year = UrlParameter.Optional, month = UrlParameter.Optional, day = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

导航时我看到一些“怪异”的行为。例如,我的主菜单上有一个Html.ActionLink,定义如下:

<li class="@item.Class">@Html.ActionLink(item.Title, item.Action, item.Controller, null, new { @class="standard" } )</li>

我还在我的视图中以相同的方式定义了侧边栏二级菜单 - 我只是更改了两个不同(部分)视图的模型。例如,我的主菜单模型如下所示:

public MenuItems()
{
    List = new List<Menu> {
                    new Menu { Controller="Home", Action="Index", Title="Home", Class="grid-2 menubutton" },
                    new Menu { Controller="Info", Action="Index", Title="Information", Class="grid-2 menubutton" },
                    new Menu { Controller="Events", Action="Index", Title="Events", Class="grid-2 menubutton" },
                    new Menu { Controller="Guilds", Action="Index", Title="Guilds", Class="grid-2 menubutton" },
                    new Menu { Controller="Populace", Action="Index", Title="Caer Galenites", Class="grid-3 menubutton" },
                    new Menu { Controller="Loop", Action="Index", Title="Get in the Loop", Class="grid-3 menubutton" }
                };
}

现在,我正在测试我的事件页面(参见上面的路由),所以当我进入主事件页面时,我正在改变URL。即:我点击主菜单中的活动,然后转到http://site.com/Events,我会看到我的活动列表。然后我追加像http://site.com/Events/2011这样的一年,过滤器就可以了。添加像http://site.com/Events/2011/9这样的月份,现在我会看到当前月份的事件。到目前为止,非常好。

然后我将鼠标悬停在其中一个侧边栏菜单项上,希望看到http://site.com/Events/Type/Kingdom,但我看到的是http://site.com/Events/Type/Kingdom/2011/9。我将鼠标悬停在主菜单链接上,而不是http://site.com/Events,我看到http://site.com/Events/2011/9。如果我将鼠标悬停在其他主菜单项上,则会显示正确的网址。

为什么呢?我如何“修复它”?

TIA

1 个答案:

答案 0 :(得分:0)

按照上面评论中的建议,我完成了所有工作。我没有将日期部分作为URL的一部分(yyy / mm / dd)而是选择了一个日期字符串(yyyy-mm-dd或yyyy-mm或yyyy)并且有一个解析器将它拉开然后将其带回正确的清单。