以下是一个示例全局声明变量:
Public Shared str as String
但是这个全球声明只针对一个网络表单。是否可以声明其他Web表单可以使用的全局变量?
答案 0 :(得分:3)
Web编程,即:asp.net,是无状态的。这意味着与传统桌面编程不同,一页请求与另一页请求无关。
在页面之间共享信息有几种标准方法:全局,会话,Cookie,缓存,数据库,查询字符串参数和Form Post参数。
全局 - 数据存储在global.asax文件中声明的全局变量中。此数据可在所有用户/页面中使用,并且将一直存在,直到IIS执行重置或您有目的地清除它。通常这是一个非常糟糕的主意,因为当值发生变化时,您很容易遇到线程问题,并且您通常不会在所有用户/会话中共享可更改的值。
会话 - 数据存储在服务器端(或存储在Web服务器或状态服务器中)。这是每个用户。适用于单个Web服务器实现;但是对于这个关于负载均衡Web服务器的简单帖子来说,有一些缺点太复杂了。在内存中会话可能会在应用重启期间被清除;状态服务器将允许会话值在该事件中持久化。但是,状态服务器通常需要数据库往返,这通常会抵消使用它而不是进行常规数据库调用的所有优点。
Cookie - 数据存储在浏览器中,并在每次页面请求时发送。这是每个用户。适用于少量数据,通常小于4KB。但是,数据被发送到浏览器,并且当然可以由最终用户进行检查。通常你会想要加密数据。负载均衡的Web服务器没有问题;但是会导致在客户端和服务器之间来回发送稍大量的数据。也没有关于Web服务器重新启动的问题。可以设置为在浏览器关闭后自动清除。
缓存 - 数据存储在缓存机制中,如memcache,可能与Web服务器位于同一台计算机上,也可能不在同一台计算机上。通常用于更高级的分布式应用程做你的研究。
数据库 - 数据存储在某种类型的数据库中,例如MS SQL Server。非常适合需要长期存活的持久数据。缺点是它需要DB调用来按需提取数据;这可以通过一般的硬件和网络速度来缓解。请注意,会话状态服务器具有完全相同的缺点。
查询字符串 - 在页面之间传输一些数据的简便方法。例如在一个页面上显示帐户列表并在另一个页面上链接到单个帐户视图。通常不适用于在整个应用程序中保留一段数据。可以轻松地在网站上预订标记特定视图。
表单帖子 - 与查询字符串类似。主要区别在于数据从一个页面发布到另一个页面而不是在查询字符串行上;这个也不是书中标记的。
答案 1 :(得分:1)
您可以使用网络表单的类型名称来访问它,如下所示
Dim thisstr = MainPage.str
lblSomeLabel.Text = thisstr
但是,您应该注意,每次加载页面时,都会重建整个ASP.Net堆栈。 (它比这复杂一点,但现在已经足够了)。因此,变量不会在页面请求之间保持不变。
您可能希望研究使用Session变量。