Параметры метода действия ASP.NET MVC из строки запроса не меняются после первого запроса - PullRequest
3 голосов
/ 08 октября 2009

У меня есть метод действия в контроллере, который должен выполнять пейджинг. Я передаю номер страницы и параметр размера страницы в строке запроса. Проблема, с которой я столкнулся, заключается в том, что первый мой запрос устанавливает параметры для всех последующих вызовов.

public ActionResult GetStuff(string key, int? page, int? pageSize)
{
  // do something magical
}

Мой маршрут выглядит так:

routes.MapRoute("GetStuff", "Stuff/{key}", new {controller = "Stuff", action = "GetStuff"});

Когда я начинаю отлаживать свое приложение, я перехожу на url / Stuff / My_Stuff, и параметр ключа правильный, а размер страницы и страницы равны нулю, как я и ожидал. Если я сделаю второй вызов с url / Stuff / My_Stuff? Page = 2 & pageSize = 3, тогда значения page и sizeSize будут по-прежнему равны нулю. Если я перезапущу приложение и сделаю мой первый вызов включающим параметры page и pageizeize, все будет работать так, как я ожидал, но затем изменение этих значений при последующих вызовах сохранит значения из первого вызова. Фактически, даже ключевой параметр, который является частью моего маршрута, сохранит то же значение, даже если я изменю свой URL. Чего мне не хватает?

Я использую IIS 6.1 на Windows Server 2003. Я использую маршруты без расширений. Кроме того, фактический код находится в VB.Net, но я не думаю, что это должно иметь значение. Но для полного раскрытия приведенный выше код представляет собой только мой фактический код, а не фактический код.

1 Ответ

3 голосов
/ 08 октября 2009

У меня была такая же проблема, потому что я использовал DI-контейнер (Castle Windsor) для создания своих контроллеров. Проблема возникла из-за настроек времени жизни классов Controller, потому что политика жизни по умолчанию в Castle - это Singleton (странное значение по умолчанию, если вы спросите меня).

Похоже, что поскольку экземпляр Controller создается только один раз за время существования приложения, параметры застревают в своих первых значениях.

Установка времени жизни для Transient решила проблему в моем случае.

...