#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