asp.net-mvc - 查询字符串中的 ASP.NET MVC 操作方法参数在第一次请求后不会更改

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

我在需要进行分页的 Controller 中有一个操作方法。我在查询字符串中传递页码和页面大小参数。我遇到的问题是我发出的第一个请求为所有后续调用设置了参数。

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

我在 Windows Server 2003 上使用 IIS 6.1。我使用的是无扩展路由。此外,实际代码在 VB.Net 中,但我认为这无关紧要。但为了全面披露,以上代码仅代表我的实际代码,而不是实际代码。

最佳答案

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

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

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

关于asp.net-mvc - 查询字符串中的 ASP.NET MVC 操作方法参数在第一次请求后不会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1539235/

相关文章:

asp.net - Beginform 不发送 View 模型,也没有到达我的 httppost 方法

asp.net-mvc - ASP.Net MVC 路由无法正常工作

c# - 将 RouteLink 与区域一起使用

asp.net - ASP.NET MVC5 中的复杂路由

c# - 可以在 Asp.Net Web Api 路由中使用句点吗?

asp.net - 带可选启动参数的asp.net mvc路由

c# - 从 Razor 获取 Controller 名称

c# - 硬编码的东西是什么意思?

javascript - 使用 JavaScript 访问 MVC 模型

c# - ASP.Net MVC - String.Join()