目前我正在使用视图状态来存储我在分页数据时所在的当前页码。我在页面上有 3 个控件,其中包含可以翻页的数据。
到目前为止,跟踪页码的最简单方法是视图状态,但它变得非常大,我不知道为什么。
所以我想用别的东西来跟踪页码,但我不知道该用什么。我应该将其嵌入为隐藏的表单字段吗?在查询字符串中传递它?其他好的选择?
您说您正在使用视图状态来存储当前页码,因此我猜您正在将该数字显式存储在视图状态中。
但是,asp.net 默认会在视图状态中存储大量数据。在您的示例中,启用了分页的 3 个控件,asp.net 将存储“控件中的所有数据”,即当前显示在 3 个控件中的所有数据都将存储在视图状态中。
对此的解决方案可能是明确关闭 3 个分页控件上的“关闭”视图状态,不幸的是,这意味着您必须在每个页面加载时重新绑定控件,这可能是您的选择,也可能不是。
如果您只需要存储页码,您可以例如将其移动到控制状态,如msdn和复数视图中所述。
使用另一个答案中建议的查询字符串。
或者您可以继续使用视图状态,然后继续关闭整个页面或仅分页控件的视图状态,无论对您有用。
我真的建议阅读Mrunal Brahmbhatt 的《真正理解视图状态》,以获得对视图状态的深入解释。
由于 HTTP 的无状态特性,很难选择实际存储状态的位置。在您的示例中,我将考虑以下内容而不是视图状态:
在 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-视图状态
您正在使用哪个版本的 ASP.Net?ASP.Net 2.0 的 ViewState 比 1.1 小很多。
在查询字符串中传递它是一个不错的选择,这使得它“可破解”并且有利于 SEO。所以对于页码,除了网址,我永远不会考虑其他任何东西!