Ошибка ActionLink с параметром ViewData в ASP.NET Бета-версии MVC

StackOverflow https://stackoverflow.com/questions/215913

  •  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?") %>

и это сработало нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top