Сбой ActionLink с параметром ViewData в ASP.NET MVC Beta - PullRequest
2 голосов
/ 19 октября 2008

У меня возникла странная проблема с методом ActionLink в ASP.NET MVC Beta. При использовании перегрузки 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, и его нет, когда Lambda оценивается внутренними компонентами фреймворка. Но это только предположение.

Я делаю что-то неправильно в первом примере, чтобы вызвать это, или это ошибка?

Обновление : я использую последнюю версию фьючерсов MVC. Было отмечено, что это работает для некоторых людей. Поскольку это не работает для меня, это заставляет меня думать, что это что-то конкретное для того, что я делаю. У кого-нибудь есть какие-либо предложения о том, на что посмотреть дальше, потому что этот действительно поставил меня в тупик.

Ответы [ 2 ]

2 голосов
/ 19 октября 2008

Обновили ли вы свою версию Microsoft.Web.Mvc.dll, в которой находится строго типизированная ссылка действия.

По-видимому, эта DLL была обновлена ​​для бета-версии. Возможно, функция была слегка изменена.

Я только что попробовал это

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %>

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

0 голосов
/ 20 октября 2008

Хорошо, я понял, в чём моя проблема.

По-видимому, я даже не устанавливал слот 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 = ""});

Таким образом, в соответствии с правилом маршрутизации должно присутствовать имя группы свойств, но в соответствии с go имя лямбда-группы было опущено (null). Это привело к тому, что инфраструктура MVC не смогла найти маршрут, который удовлетворил мой запрос, и просто вернула ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...