2012-06-11 85 views
6

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

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

我该如何解决这个问题?

+0

您最好查看一下ASP.NET缓存,您可能会发现它适合您的需求。 –

回答

8

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

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

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

缓存是始终使用机器的内存,会话使用什么样已被配置:

在Web场会话可以是本地(其中只有亲和力设置有效),或远程(状态服务器或数据库或自定义),但缓存始终是本地的。

因此,将DataTable存储在缓存中会占用内存,但不会使用序列化。 PS:存储一个DataSet而不是一个DataTable将几乎没有改变。

Refer Cache Implementation

+0

阅读http://msdn.microsoft.com/en-us/library/bb386448.aspx和http://weblogs.asp.net/sreejukg/archive/2010/04/06/viewstatemode-in- asp-net-4-0.aspx –

+0

“你不能访问客户端的视图状态。”事实上,你可以访问它,因为它没有被加密(默认)。但是,它不能更改,因为它包含一个将由ASP.NET验证的散列。 – Steven

+0

@Steven,我同意你的意见,即我们可以访问viewstate,但访问它们并不会有用,因为我们将如何从viewstate变量中获取实际/解码值。 –

7

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

1

保存视图状态下的大量数据会降低您的网站。 使用查询字符串从每个页面上的数据库获取新鲜副本,而不是保存上一页中的全部信息。

0

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

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