8

ViewState 存储在哪里?它存储在服务器端还是客户端?

我有一个巨大的数据,应该为某些过程存储。我正在使用会话。但是当从一个页面移动到另一个页面时,我无法清除会话。所以我想到了实现ViewState。但是当运行大量数据时,ViewState 会抛出错误?

我该如何解决这个问题?

4

5 回答 5

11

Viewstate 以编码形式存储在它自己的页面上。您无法直接访问客户端的视图状态。您需要了解编码/解码算法才能在客户端代码中从此视图状态中获取有价值的数据。

您可以使用隐藏变量来存储仅在该页面上使用的数据。隐藏变量可以从客户端和服务器端代码访问。

您可以使用缓存或会话来存储数据表(大数据)。与 ViewState 相比,它们将具有良好的性能。

缓存始终使用机器的内存,会话使用已配置的内容:

在网络场中,会话可以是本地的(仅在设置了关联性时才有效),也可以是远程的(状态服务器或数据库,或自定义),但缓存始终是本地的。

因此,将 DataTable 存储在缓存中会消耗内存,但不会使用序列化。

PS:存储 DataSet 而不是 DataTable 几乎不会改变。

参考缓存实现

于 2012-06-11T08:46:27.340 回答
7

ViewState 不存储在任何一方,它在每次请求和响应时在服务器和浏览器之间来回发送,因此在 ViewState 中放置大量数据并不是一个好主意。

于 2012-06-11T08:51:19.037 回答
4

ViewState 存储在您告诉它的位置。默认情况下,这是在发送给客户端的页面上的隐藏字段中。

ASP.NET 也可以将 ViewState 存储在 Session中,即在服务器上,如果你告诉它的话。

于 2015-01-09T15:42:23.673 回答
1

Save large amount of data in view-state slowdown your site. Use query string to fetch fresh copy from database on each page rather than save whole information from previous page.

于 2012-06-11T08:55:07.573 回答
0

查看隐藏字段中的状态信息存储。信息在此隐藏字段中在服务器和客户端之间传输。

对于 asp.net 控件,.. 默认情况下,.net 为其所有控件实现视图状态,这就是为什么当我们单击该页面的按钮时文本框值不会丢失的原因。

于 2014-01-01T08:09:20.123 回答