将对象引用到Session属性

时间:2011-07-22 15:45:41

标签: c# asp.net

我的aspx页面中有一个文本框,我创建了一个Session属性(文本框类型),然后:

textBoxInSession = myTextBox;

如果我在textBoxInSession中更改Text属性,则myTextBox中的Text属性不会更改。

是不是textBoxInSession对myTextBox的引用?

4 个答案:

答案 0 :(得分:2)

通常,您不应将UI元素/控件持久保存到Session或Application状态。存储对象实例时,将其固定以及在内存中包含对其引用的所有内容。由于ASP.NET在每次执行页面时都会创建一个新实例,因此如果您大量使用此技术,这可能会导致非垃圾收集的Page和Control实例占用大量内存。

您应该存储值类型,字符串和可序列化的POCO或业务层类型,并在需要时将它们重新绑定到UI控件。

答案 1 :(得分:1)

当您的页面提供新请求时,它是页面的新实例,包含控件的新实例。因此,TextBox是另一个实例,而不是您在先前请求中存储在Session中的实例。

答案 2 :(得分:0)

testBixInSession是页面文本框的副本,而不是引用。

答案 3 :(得分:0)

页面的每个请求都由不同的线程处理,并为该请求创建类的新实例。存储在Session中的文本框是来自上一页请求的上一个类实例的TextBox。

如果在同一请求期间,您期望的行为将起作用。但是,由于您可以直接引用TextBox,因此实际上没有用处。