Параметр в порядке в RouteData, но передан как null в контроллере

Я занимаюсь MVC уже несколько недель, и каждый день появляется что-то новое, что кажется мне довольно странным. Итак, я пытаюсь найти ответы на вопросы, с которыми я сталкиваюсь. Тем не менее, для текущей проблемы я не могу найти ответ здесь, в stackoverflow, или где-либо в Google, если на то пошло...

У меня возникла проблема с передачей параметров моему контроллеру с помощью метода HTML.RenderAction. По какой-то причине параметр правильно попадает в RouteData, но «параметр функции» имеет значение null. Я думаю, что это связано с моими картами маршрутизации, поэтому я хотел бы опубликовать их здесь для получения дополнительной информации.

Моя карта маршрутов (среди прочего, но я знаю, что мое текущее действие использует этот корень):

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" },
            null,
            new[] { "Web.Controllers" }
        );

Мое действие контроллера:

public ActionResult GeneralManagementDetail(int? id)
{
        //dostuff
}

Вызов RenderAction:

<% Html.RenderAction("GeneralManagementDetail", "Person", new { id = 4 }); %>

Где, конечно, «4» в настоящее время является жестко закодированным значением, и оно станет идентификатором объекта из содержащего цикла foreach, который у меня есть.

Теперь, к чему это приводит, так это к тому, что «int id» в контроллере равен NULL, однако, когда «QuickWatching» RouteData, он определенно имеет пару ключ-значение «id, 4» в нем...


person Tim Geerts    schedule 03.02.2010    source источник
comment
Это работает для нас, но мы не используем повторно токен из URI. Будет ли это работать, если вы измените id на detailId как в действии, так и в вызове RenderAction?   -  person Craig Stuntz    schedule 03.02.2010
comment
Нет, изначально я думал, что это тоже проблема, поэтому я использовал имя параметра, которое не было близко ни к одному из имен, используемых во всех моих сопоставлениях, и это дало тот же результат.   -  person Tim Geerts    schedule 03.02.2010
comment
Хм... Ну, у нас это работает, но мы используем MVC 2. Возможно, вы захотите попробовать это изолированно в бездействующем проекте и посмотреть, изменилось ли оно между MVC 1 и 2. Поскольку это в Futures, он не полностью протестирован в MVC 1.   -  person Craig Stuntz    schedule 03.02.2010


Ответы (2)


Хорошо, просто чтобы уточнить, проблема, по-видимому, заключалась в том, что контроллеры кэшировались в предоставленной нам структуре (другая команда разработчиков делает структуру). Итак, когда мы покопались во фреймворке и убедились, что контейнеры больше не кешируются, передача параметров сработала как по волшебству. Большое спасибо за ответы, но, похоже, проблема была в нашей собственной компании!

person Tim Geerts    schedule 04.02.2010

Может быть, «id = (int?) null» поможет? Я имею в виду, что если типы перепутаны.

person queen3    schedule 03.02.2010
comment
Тоже не справился... Тем не менее, я думаю, что решу это другим способом, например, при рендеринге частичного представления с параметром RenderPartial и просто передаче подмодели основной модели. Это будет работать и по-прежнему будет жизнеспособным решением для веб-сайта. (И на самом деле это может быть более правильной структурой). - person Tim Geerts; 04.02.2010