2011-07-22 57 views
0

我有一个文本框,在我的aspx页面,我创建了一个会话属性(文本型),则:参考对象的Session属性

textBoxInSession = myTextBox;

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

是不是textBoxInSession对myTextBox的引用?

+1

让我们看看有问题的实际代码。你为什么要保存整个文本框而不仅仅是文本?如果您试图获得更改通知,那么您可能需要查看NodeJS –

回答

0

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

+1

会话存储参考,而不是副本。这只是一个新的页面有另一个实例。 –

1

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

0

页面的每个请求都由不同的线程处理,并为该请求创建了类的新实例。存储在会话中的文本框是前一页请求中类的前一个实例的文本框。

您期望的行为将在同一请求期间起作用。但是,由于您可以直接引用TextBox,所以它确实没有用处。

2

通常,您不应该将UI元素/控件持久保存到会话或应用程序状态。当你存储一个对象实例时,你可以将它和所有内容中的引用保存在内存中。由于ASP.NET在每次执行页面时都会创建一个新实例,因此如果大量使用此技术,则可能会导致大量内存被非垃圾回收页面和控件实例占用。

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