MVC3 Actionlink перенаправляет на неправильный контроллер

#asp.net-mvc #asp.net-mvc-3

#asp.net-mvc #asp.net-mvc-3

Вопрос:

У меня есть программная сумма контроллера, которую я хочу перенаправить на второй контроллер TRPResource. В первом контроллере для подробного просмотра у меня есть ActionLink:

 @Html.ActionLink("Resource(s)", "TRPDetails", "TRPResource", new { ttl = ViewBag.shrt_titles })
  

Он перенаправляет на запрошенный URL: /ProgramSummary/TRPDetails который является правильным представлением, но неправильным контроллером. Если я изменю ActionLink на чтение (следующим образом)

 @Html.ActionLink("Resource(s)", "TRPDetails", "TRPResource")
  

Actionlink работает так, как я задумал, и переходит к правильному контроллеру и представлению, но проблема в том, что значение не сохраняется в ViewBag и не передается. Какую концепцию я здесь упускаю и / или можно ли обойти или предложить другой подход?

Ответ №1:

Вы используете неправильную перегрузку помощника ActionLink. Вы должны использовать правильную перегрузку (обратите внимание на null в конце):

 @Html.ActionLink(
    "Resource(s)",                        // linkText
    "TRPDetails",                         // actionName
    "TRPResource",                        // controllerName
    new { ttl = ViewBag.shrt_titles },    // routeValues
    null                                  // htmlAttributes
)
  

в то время как ваш код использует следующую перегрузку:

 @Html.ActionLink(
    "Resource(s)",                     // linkText
    "TRPDetails",                      // actionName
    "TRPResource",                     // routeValues
    new { ttl = ViewBag.shrt_titles }  // htmlAttributes
)
  

Заметили проблему?

Ответ №2:

Помощник ActionLink использует вашу конфигурацию маршрутизации для построения URL-адресов на основе предоставленных значений маршрута. Вероятно, у вас есть какой-то маршрут, по которому он проходит до того, по которому вы хотите попасть. Ваша маршрутизация кажется довольно простой, поэтому вы просто внимательно смотрите на маршруты. В более сложных сценариях вы можете использовать отладчик маршрутизации

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx