На моей странице макета ссылки на основные разделы, которые составляют мой сайт, отображаются с помощью вызова, подобного этому:
@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>
}
На самой странице блога все ссылки также ссылаются на действие «Индекс», но также указывают либо параметр даты (например, «blog / 4-2011» или «blog / 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
);
Теперь проблема заключается в том, что, когда я нажал на ссылку, похожую на «blog / 11-2010» или «blog / 11-2010 / 253 "тогда ссылка на моей странице макета, которая ссылается на мой блог в целом, теперь также ссылается на тот же URL, когда я хочу, чтобы он просто ссылался на" blog / ", а не"blog / 11-2010 ".
Если я изменю помощнику SiteSectionLink, чтобы явно передать NULL для date
и postID
следующим образом:
<a class="site-section" href="@Url.Action(action, controller,
new { date = (string)null, postID = (int?)null})">@display</a></h1>
Текущие значения маршрута все ещеиспользуется, но теперь выглядит как «блог? дата = 11-2010».
Я видел этот похожий вопрос, но принятый ответ не работает для меня, и я не используюActionLink
во-первых, и я подозреваю, что ActionLink
будет использовать Url.Action
под капотом.