Используя следующий код:
@Html.ActionLink("News", "Index", new { controller = "News", area = "" }, new { @class = "News" })
Я получаю сообщение об ошибке, поэтому, когда я нахожусь в определенной статье новостей, ссылка генерируется как:
http://mywebsite/News/2011/12/2/my_slug
где параметры соответствуют странице, на которой я сейчас нахожусь. Это также происходит на других контроллерах, соответствующих той же схеме URL (представьте, что у меня есть другой контроллер под названием Presentations, который полностью соответствует схеме URL News). На страницах презентаций ссылка на новости будет содержать параметры презентаций, которые не являются допустимыми для контроллера новостей. Имеет смысл?
Мои маршруты определены как:
routes.MapRoute(
"News-Archive", // Route name
"News/Archive", // URL with parameters
new { controller = "News", action = "Archive" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
routes.MapRoute(
"News-Stub", // Route name
"News/{year}/{month}/{date}/{slug}", // URL with parameters
new { controller = "News", action = "Index" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
routes.MapRoute(
"News-ByDay", // Route name
"News/{year}/{month}/{day}", // URL with parameters
new { controller = "News", action = "Archive" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
routes.MapRoute(
"News-ByMonth", // Route name
"News/{year}/{month}", // URL with parameters
new { controller = "News", action = "Archive" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
routes.MapRoute(
"News-ByYear", // Route name
"News/{year}", // URL with parameters
new { controller = "News", action = "Archive" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
routes.MapRoute(
"News-Default", // Route name
"News", // URL with parameters
new { controller = "News", action = "Index" }, // Parameter defaults
new[] { "mywebsite.Controllers" }
);
Может кто-нибудь объяснить, кроется ли проблема в моем использовании Html.ActionLink или в моих определениях маршрутов?
EDIT:
Изменение ссылки на действие на:
@Html.ActionLink("News", "Index", new { controller = "News", area = "", year = string.Empty, month = string.Empty, day = string.Empty, slug = string.Empty}, null)
приводит к этому при вызове со страницы презентации (эти значения относятся к презентации, а не к действительному элементу новостей):
http://mywebsite/News?year=2011&month=12&slug=seo_overview
Не уверен, почему это приводит к изменению переписывания.