5

我遇到了一个问题,在我的视图中有一个 Html.DropDownList 会在我第一次提交表单时回发所选值,但每个后续回发只会发布来自初始回发的数据。因此,我将 Lifestyle="transient" 添加到为温莎城堡配置控制器的组件元素中,这解决了问题,但由于每个请求都会实例化一个新控制器,因此回发当然需要更长的时间。鉴于上述信息,哪些见解、建议或解决方案可能有助于确定我最初关于控制器生活方式的问题?感谢大家的帮助和支持!

4

4 回答 4

7

MVC 控制器是瞬态的。考虑一下,这有几个原因是有道理的。首先,如果单个实例用于服务多个请求,并且多个请求碰巧同时命中同一个控制器,您将遇到一些相当奇怪的竞争条件。其次,HTTP 本质上是无状态的,请求彼此独立存在。这反映在控制器的瞬态生活方式上。

于 2009-11-24T19:16:49.297 回答
5

瞬态,是的,但是为了兴趣,为什么不用 PerWebRequest 而不是瞬态?我看过一些使用 PerWebRequest 生活方式的博客,但我想不出为什么不这样做的原因。有什么答案吗?

于 2013-09-12T04:55:18.547 回答
4

我同意迪翁的观点。登陆这里寻找同样问题的解决方案。好像PerWebRequest比较合适。

根据您将容器集成到 MVC 和 WebApi 的方式,当您的控制器不再被使用时,您可能不会指示 Windsor 释放依赖项。

如果您将其设置为PerWebRequest,它将在请求结束时自动释放您的控制器及其所有依赖项

于 2013-12-12T19:44:07.513 回答
0

如果控制器生命周期是 PerWebRequest,则在视图中使用 Html.Action 可能会导致每个控制器产生多个请求,从而引发错误“控制器 XPTO 的单个实例不能用于处理多个请求”。

检查 Robert Muehsig(https://blog.codeinside.eu/2011/01/18/fix-a-single-instance-of-controller-foocontroller-cannot-be-used-to-handle-multiple-requests-mvc3/ ),此处翻译自德语:«例如,当您输入 LifestyleType.WebRequest 并通过 RenderAction 多次调用控制器时,就会出现问题 - 框架不喜欢这样,并且会出现花哨的错误消息。原因很简单:一个 HttpRequest 到达,所以恰好创建了一个控制器实例。然后他想通过 RenderAction 多次访问这个实例,这可能是不可能的»»

于 2021-07-02T12:18:29.383 回答