2012-03-09 4 views
0

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

На странице, отображаемой по 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/, если нет.

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

EDIT (возможно, уместно?):
Когда 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

Ваш аргумент должен быть установлен как необязательный – diaho

+0

@ M.Babcock Маршруты добавлены – yoozer8

ответ

0

проблема решена. Я разделил маршруты с аргументами и без них.

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

routes.MapRoute(
"Hello World With Arg", 
"HelloWorld/{arg}", 
new {controller = "Home", action = "HelloWorld", arg = ""} 
); 
Смежные вопросы