5

这是一个示例全局声明变量:

Public Shared str as String

但是这个全局声明仅适用于一个 Web 表单。是否可以声明其他 Web 表单可以使用的全局变量?

4

2 回答 2

5

Web 编程,即:asp.net,是无状态的。这意味着与传统的桌面编程不同,一个页面请求与另一个页面请求无关。

在页面之间共享信息有几种标准方式:全局、会话、Cookie、缓存、数据库、查询字符串参数和表单发布参数。

全局- 数据存储在 global.asax 文件中声明的全局变量中。此数据在所有用户/页面中都可用,并且在 IIS 进行重置或您有意将其清除之前将一直存在。通常是一个非常非常糟糕的主意,因为当值发生变化并且您通常不会在所有用户/会话之间共享可变值时,您很容易遇到线程问题。

会话- 数据存储在服务器端(或 Web 服务器的内存或状态服务器中)。这是每个用户。适用于单个 Web 服务器实现;然而,对于这篇关于负载平衡 Web 服务器的简单帖子来说,这些缺点过于复杂。在应用程序重启期间,内存中的会话可能会被清除;状态服务器将允许在该事件中保留会话值。但是,状态服务器通常需要数据库往返,这通常会抵消使用它而不是进行常规数据库调用的所有优势。

Cookies - 数据存储在浏览器中并在每个页面请求时发送。这是每个用户。适用于少量数据,一般小于 4KB。但是,数据被发送到浏览器,并且最终用户当然可以检查。通常你会希望数据加密。负载平衡的 Web 服务器没有问题;但是会导致客户端和服务器之间来回发送的数据量稍大一些。也没有关于 Web 服务器重启的问题。可以设置为关闭浏览器后自动清除。

缓存- 数据存储在像 memcache 这样的缓存机制中,它可能与 Web 服务器在同一台机器上,也可能不在同一台机器上。通常用于更高级的分布式应用程序。做你的研究。

数据库- 数据存储在某种类型的数据库中,例如 MS SQL Server。非常适合需要长期生存的持久数据。缺点是它需要调用数据库来按需提取数据;通用硬件和网络速度可以缓解这种情况。请注意,会话状态服务器具有完全相同的缺点。

查询字符串- 在页面之间传输一些数据的简单方法。例如在一个页面上显示帐户列表并在另一个页面上链接到单个帐户视图。对于在整个应用程序中保留一条数据通常没有用处。可以轻松地为网站上的特定视图添加书签。

表单发布- 类似于查询字符串。主要区别在于数据是从一个页面发布到另一个页面,而不是在查询字符串行上;这也不是书签。

于 2013-02-27T00:58:02.050 回答
1

您可以通过使用网络表单的类型名称来访问它,类似于这样

Dim thisstr = MainPage.str
lblSomeLabel.Text = thisstr

但是,您应该注意,每次加载页面时,都会重新构建整个 ASP.Net 堆栈。(这比这要复杂一些,但现在已经足够了)。因此,变量不会在页面请求之间持续存在。

您可能想研究使用 Session 变量。

于 2013-02-27T00:36:35.247 回答