2013-03-24 2 views
2

Как правило, ActionLink, который направляет действие индекса любого контроллера, пропускает «Индекс» в ссылке, то есть http://localhost:8080/Controller/id. В моем случае я пытаюсь передать строку в качестве идентификатора для действия индекса контроллера Eta. Код выглядит следующим образом:ASP.NET MVC4 ActionLink отображает «Индекс» в ссылках

@Html.ActionLink(item.Name, "Index", "Eta", new { id = item.Name }, null)

В результате ссылка выходит как: http://localhost:8080/Eta/Index/some-input-string вместо http://localhost:8080/Eta/some-input-string

Это RouteConfig точно так, как это было бы с File> New Project> MVC4 Application.

ответ

3

Включая «Индекс», поскольку действие в URI необходимо, потому что вы включаете в себя значения маршрута в строке.

Без указания действия значения маршрута будут интерпретироваться как действие.

Например:

http://localhost:8080/Etc/abc123 
        ^^
       Controller | 
          | 
         Action (oops) 

Вам, abc123 является важным параметром. Для механизма маршрутизации это действие.

+0

очень хорошо сказано! ! –

+0

Спасибо! Полагаю, это довольно очевидно, когда вы об этом думаете. – Tom

0

Стандартный маршрут в MVC4 шаблон {Controller}/{действие}/{ID}, так что вы должны изменить его на {контроллер}/{идентификатор} с Действие по умолчанию = "Index"

+0

это просто невозможно. как механизм маршрутизации знает разницу между действием с именем 1 и идентификатором? вы слепо угадываете и гадаете неправильно. –

+0

, если маршрут, сконфигурированный как {controller}/{id}, чем второй параметр, всегда будет интерпретироваться как {id} –

+0

, тогда вы никогда не будете бить/контроллер/действие, второй параметр ВСЕГДА будет id –

Смежные вопросы