asp.net使用什么而不是viewstate

时间:2009-01-27 07:47:28

标签: asp.net viewstate

目前我正在使用viewstate来存储我在分页数据时所使用的当前页码。我在页面上有3个控件,这些控件包含我可以翻阅的数据。

到目前为止,跟踪页码的最简单方法是查看状态,但它变得非常大,我不知道为什么。

所以我想用别的东西来跟踪页码,但我不知道该用什么。我应该把它嵌入隐藏的表格字段吗?将它传递给查询字符串?其他不错的选择?

4 个答案:

答案 0 :(得分:6)

您正在声明您正在使用viewstate存储当前页码,我猜您明确将此号码存储在viewstate中。

但是,asp.net默认会在viewstate中存储 lot 数据。在你的例子中,有3个控件启用了分页,asp.net将存储“控件中的所有数据”,即3个控件中当前显示的所有数据都将存储在viewstate中。

解决这个问题的方法可能是明确地在3个分页控件上“关闭”viewstate,不幸的是,这意味着你必须重新绑定每个页面加载的控件,这可能是也可能不是你的选项。

如果您只需要存储页码,您可以将其移至控制状态,如msdnpluralsight所述。

使用另一个答案中建议的查询字符串。

或者您可以继续使用viewstate,然后继续关闭整个页面的viewstate,或者只关闭分页控件,无论对你有用。

我真的建议您阅读Mrunal Brahmbhatt的Truly Understanding Viewstate,以深入解释观点状态。

答案 1 :(得分:2)

将页码存储在ViewState中不应占用那么多空间,所以我认为你应该解决问题的根源。

在ASP.Net中,默认情况下为每个控件打开ViewState。因此,带有静态文本的简单标签将占用ViewState中的空间。关闭它将有很大帮助。

查看这两篇文章,过去他们给了我很多帮助:

http://www.webreference.com/programming/asp/viewstate/ http://www.webpronews.com/expertarticles/2005/11/07/optimize-aspnet-pages-by-reducing-the-size-of-the-viewstate

您正在使用什么版本的ASP.Net? ASP.Net 2.0的ViewState比1.1小很多。

答案 2 :(得分:2)

由于HTTP的无状态特性,很难选择实际存储状态的位置。在您的示例中,我将考虑以下而不是viewstate:

  1. 查询字符串 - 页码足够小,非常适合那里。
  2. Cookie - 在这种情况下,您的数据会持续更长时间,并将通过所有GET和POST请求生效。
  3. 会话 - 与上一个选项几乎相似,但数据将存储在服务器上。

答案 3 :(得分:1)

在查询字符串中传递它是一个不错的选择,这使得它“hackable”并且对SEO有利。所以对于页码,我永远都不会在网址之外进行任何其他的调整!