Ошибка ActionLink с параметром ViewData в ASP.NET Бета-версии MVC
-
03-07-2019 - |
Вопрос
Я столкнулся со странной проблемой с методом ActionLink в ASP.NET Бета-версии MVC.При использовании перегрузки Lambda из фьючерсов MVC я, похоже, не могу указать параметр, извлеченный из ViewData.
Когда я пытаюсь это сделать:
<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %>
HTML-файл содержит ссылку с пустым URL-адресом.
<a href="">upload new photo</a>
Однако, если я жестко закодирую параметр, например, так:
<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %>
Выходные данные содержат фактический URL-адрес.
<a href="/group/groupA/Photo/Upload">upload new photo</a>
Я предполагаю, что это, вероятно, как-то связано с видимостью и доступностью ViewData, и его там нет, когда лямбда-выражение оценивается внутренними компонентами фреймворка.Но это всего лишь предположение.
Я делаю что-то неправильное в первом примере, чтобы вызвать это, или это какая-то ошибка?
Обновить:Я использую последнюю версию фьючерсов MVC.Было отмечено, что это работает для некоторых людей.Поскольку у меня это не работает, это заставляет меня думать, что это что-то специфическое для того, что я делаю.Есть ли у кого-нибудь какие-либо предложения относительно того, на что обратить внимание дальше, потому что это действительно ставит меня в тупик?
Решение 2
Хорошо, я понял, в чём была моя проблема.
По-видимому, я даже не устанавливал слот ViewData, который пытался прочитать в представлении, в результате чего он имел нулевое значение.
Так что по сути я писал:
<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %>
Я думаю, что основной движущей силой всего этого стал тот факт, что параметр (имя группы) представляет недопустимое значение в моей таблице маршрутизации.
routes.MapRoute(
"Group",
"group/{groupname}/{controller}/{action}/{id}",
new {controller = "Photos", action = "View", Id = ""});
Таким образом, в соответствии с правилом маршрутизации должно присутствовать имя группы свойств, но в соответствии с ходом Lambda Gropname было опущено (null). Это привело к тому, что среда MVC не смогла найти маршрут, который удовлетворил мой запрос, и просто вернула ноль.
Другие советы
Обновили ли вы свою версию файла Microsoft.Web.Mvc.dll, в котором находится строго типизированная ссылка на действие.
По-видимому, эта библиотека dll была обновлена для бета-версии.Возможно, эта функция была немного изменена.
Я только что попробовал это
<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %>
и это сработало нормально.