我无法使 @Url.Action 与具有非标准路线结构的区域一起工作。
例如,如果我在仪表板区域中注册此路线:
context.MapRoute(
"Dashboard_default",
"Dashboard/{controller}/{action}/{id}",
new { controller = "View", action = "Display", id = UrlParameter.Optional }
);
然后在我的布局视图中我调用:
@Url.Action("Select", "View", new { area = "Dashboard" })
我得到一个正确的网址:/Dashboard/View/Select
但是,如果我更改路线以包含可选的辅助 ID,如下所示:
context.MapRoute(
"Dashboard_default",
"Dashboard/{controller}/{action}/{id}/{secondaryid}",
new { controller = "View", action = "Display", id = UrlParameter.Optional, secondaryid = UrlParameter.Optional }
);
然后对 @Url.Action(...) 的相同调用不会返回任何 url。如果我用真实值指定那些可选参数,如下所示:
@Url.Action("Select", "View", new { area = "Dashboard", id = 1, secondaryid = 2 })
我确实得到了上帝的返回值:/Dashboard/View/Select/1/2
问题是,对于我在该领域的某些操作,不需要 id 或辅助 id,我希望在没有它们的情况下生成 url。如果我将它们设置为 (int?)null 它仍然不起作用。
难道我做错了什么?如果我没有在 routeValues 参数中指定它们,Url.Action(...) 不应该返回没有 id 和 secondaryid 令牌的 URL 吗?