Html.ActionLink дает разные результаты в зависимости от URL - PullRequest
0 голосов
/ 09 марта 2012

У меня есть URL http://localhost:xyz/HelloWorld, который указывает на действие HelloWorld в контроллере Home.

На странице, отображаемой по URL, у меня есть Html.ActionLink, которыйуказывает на ту же страницу (да, ссылка на страницу, на которой вы сейчас находитесь).

Проблема в том, что эта ссылка указывает на страницу, только если страница загружена как http://localhost:xyz/HelloWorld/ (с косой чертой),Если страница загружена как http://localhost:xyz/HelloWorld (без косой черты), она указывает на действие Index контроллера Home.

Я перепробовал несколько перегрузок, но не могу понять, чтовызывает это или как это исправить.

Html.ActionLink("Hello World", "HelloWorld", "Home");
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null);
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null);

Все они имеют одинаковый результат.Они работают нормально, если есть косая черта, и направляют на http://localhost:xyz/, если их нет.

Кто-нибудь может объяснить это поведение или как его исправить?

РЕДАКТИРОВАТЬ (возможно, актуально?):Когда присутствует arg, а не 0, та же страница отображается на http://localhost:xyz/HelloWorld/arg и имеет ссылку «Hello World» (которая прекрасно работает) и аналогичную ссылку, которая работает безупречно.

Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null);

Это указывает на себя правильно, независимо от того, присутствует ли косая черта.

МАРШРУТЫ :

routes.MapRoute(
  "HomeStart",
  "",
  new { controller = "Home", action = "Index" }
);

routes.MapRoute(
  "Hello World",
  "HelloWorld/{arg}",
  new {controller = "Home", action = "HelloWorld", arg = ""}
);

1 Ответ

0 голосов
/ 10 марта 2012

Проблема решена.Я разделил маршруты для аргументов и без аргументов.

routes.MapRoute(
 "Hello World",
 "HelloWorld",
 new {controller = "Home", action = "HelloWorld"}
);

routes.MapRoute(
 "Hello World With Arg",
 "HelloWorld/{arg}",
 new {controller = "Home", action = "HelloWorld", arg = ""}
);
...