在我的布局页,到弥补我的网站的主要栏目的链接呈现与呼叫这样的:Url.Action重用路线数据时,我不希望它
@SiteSectionLink("index", "blog", "blog")
凡SiteSectionLink
是一个辅助,看起来像这样:
@helper SiteSectionLink(string action, string controller, string display)
{
<li>
<h1>
<a class="site-section" href="@Url.Action(action, controller)">@display</a></h1>
</li>
}
在实际的博客页面,各个环节也请参阅“索引”行动也是指定一个日期参数(如“博客/ 4-2011”或“博客/ 2010“),用于按日期过滤帖子。除此之外,还有一个可选的postID
参数用于引用特定的帖子。
为了实现这个目标,我有以下途径:
routes.MapRoute(
"Blog",
"blog/{date}/{postID}",
new
{
controller = "blog",
action = "index",
date = UrlParameter.Optional,
postID = UrlParameter.Optional
}
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
现在的问题是,当我点击了一个链接,是像“博客/ 11-2010”或“博客/ 11- 2010/253“,那么我的布局页面中的链接现在指的是我的博客也当我希望它只链接到”blog /“而不是”blog/11-2010“时,指的是相同的URL。
如果我改变SiteSectionLink帮手在空明确地传递了date
和postID
这样的:
<a class="site-section" href="@Url.Action(action, controller,
new { date = (string)null, postID = (int?)null})">@display</a></h1>
当前的路由值仍在使用,但现在它看起来像“?博客日期= 11-2010” 。
我看到this类似的问题,但接受的答案不为我工作,我不首先使用ActionLink
我怀疑ActionLink
将使用Url.Action
引擎盖下。
谢谢你的改进分裂路线,你说得对,有两个可选配只会引起头痛。 – JulianR
第二个想法是,我将其标记为答案,因为这是解决它的分裂问题,再加上对SiteSectionLink的重载。 – JulianR