У меня есть страница индекса MVC4, которые имеют следующие ссылки:MVC4 ActionLink без параметров указывает на пути тока
@Html.ActionLink("FOO", "Index", "Mil", new { year = String.Empty, id = String.Empty }, null)
@Html.ActionLink("BAR", "Index", "Euro", new { year = String.Empty, id = String.Empty }, null)
Но как ни странно, как превратить в гиперссылку на ТОКА пути (то есть, если мы находимся в domain/Euro/2016/1 и ссылку на этот адрес) вместо указания на указанный контроллер.
Все нормально в RouteConfig:
routes.MapRoute(
name: "Default",
url: "{controller}/{year}/{id}",
defaults: new { controller = "Home", action = "Index", year = UrlParameter.Optional, id = UrlParameter.Optional }
);
Контроллеры/Действия существуют и работают отлично:
EuroController:
public ActionResult Index(int? year, int? id)
{
...
}
Что может быть причиной этого странное поведение?
EDIT:
Если я прохожу параметр года, работает отлично: @Html.ActionLink("FOO", "Index", "Mil", new { year = 666, id = String.Empty }, null)
правильно указывает на домен /мили/666.
, вероятно, не вопрос, но только последний параметр может быть помечен как 'UrlParameter.Optional' –
Я редактировал мой вопрос. Это не решение, но, безусловно, связано. Я изменил 'year = UrlParameter.Optional' в Routes to' year = "" ', как вы предполагали, но проблема осталась. –
либо используйте 'null', то есть:' @ Html.ActionLink («FOO», «Index», «Mil», new {year = null, id = null}, null) 'или удалить их все вместе, то есть:' @ Html.ActionLink («FOO», «Index», «Mil», null, null) ' – Nkosi