目前我正在使用viewstate来存储我在分页数据时所使用的当前页码。我在页面上有3个控件,这些控件包含我可以翻阅的数据。
到目前为止,跟踪页码的最简单方法是查看状态,但它变得非常大,我不知道为什么。
所以我想用别的东西来跟踪页码,但我不知道该用什么。我应该把它嵌入隐藏的表格字段吗?将它传递给查询字符串?其他不错的选择?
答案 0 :(得分:6)
您正在声明您正在使用viewstate存储当前页码,我猜您明确将此号码存储在viewstate中。
但是,asp.net默认会在viewstate中存储 lot 数据。在你的例子中,有3个控件启用了分页,asp.net将存储“控件中的所有数据”,即3个控件中当前显示的所有数据都将存储在viewstate中。
解决这个问题的方法可能是明确地在3个分页控件上“关闭”viewstate,不幸的是,这意味着你必须重新绑定每个页面加载的控件,这可能是也可能不是你的选项。
如果您只需要存储页码,您可以将其移至控制状态,如msdn和pluralsight所述。
使用另一个答案中建议的查询字符串。
或者您可以继续使用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:
答案 3 :(得分:1)
在查询字符串中传递它是一个不错的选择,这使得它“hackable”并且对SEO有利。所以对于页码,我永远都不会在网址之外进行任何其他的调整!