来自Querystring的ASP.NET MVC操作方法参数在第一次请求后不会更改

时间:2009-10-08 17:16:45

标签: asp.net-mvc asp.net-mvc-routing

我在控制器中有一个需要进行分页的动作方法。我在查询字符串中传递了页码和pagesize参数。我遇到的问题是我做的第一个请求为所有后续调用设置了参数。

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并且key参数是正确的,并且page和pagesize都是null,正如我所料。如果我使用url / Stuff / My_Stuff进行第二次调用?page = 2& pageSize = 3那么page和pageSize的值仍为null。如果我重新启动应用程序,并使我的第一个调用包含页面和pagesize参数,一切都按预期工作,但随后在后续调用中更改这些值将保留第一次调用的值。实际上,即使我更改了我的Url,即使是我的路线的一部分关键参数也将保持相同的值。我错过了什么?

我在Windows Server 2003上使用IIS 6.1。我正在使用无扩展路由。此外,实际的代码是在VB.Net,但我不认为这应该重要。但是为了完全公开,上面的代码只代表我的实际代码,而不是实际的代码。

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,因为我使用了DI Container(Castle Windsor)来创建我的控制器。问题出现的原因是Controller类的生命周期设置,因为Castle中的默认生命周期策略是Singleton(如果你问我,这是一个奇怪的默认设置)。

似乎因为Controller实例仅在应用程序的生命周期中创建一次,所以参数会卡在它们的第一个值上。

将生命周期设置为Transient解决了我的问题。