4

目前我正在使用视图状态来存储我在分页数据时所在的当前页码。我在页面上有 3 个控件,其中包含可以翻页的数据。

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

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

4

4 回答 4

6

您说您正在使用视图状态来存储当前页码,因此我猜您正在将该数字显式存储在视图状态中。

但是,asp.net 默认会在视图状态中存储大量数据。在您的示例中,启用了分页的 3 个控件,asp.net 将存储“控件中的所有数据”,即当前显示在 3 个控件中的所有数据都将存储在视图状态中。

对此的解决方案可能是明确关闭 3 个分页控件上的“关闭”视图状态,不幸的是,这意味着您必须在每个页面加载时重新绑定控件,这可能是您的选择,也可能不是。

如果您只需要存储页码,您可以例如将其移动到控制状态,如msdn复数视图中所述。

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

或者您可以继续使用视图状态,然后继续关闭整个页面或仅分页控件的视图状态,无论对您有用。

我真的建议阅读Mrunal Brahmbhatt 的《真正理解视图状态》,以获得对视图状态的深入解释。

于 2009-01-27T09:24:20.370 回答
2

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

  1. 查询字符串- 页码足够小,可以很好地适合那里。
  2. Cookies - 在这种情况下,您的数据将持续更长时间,并将在所有 GET 和 POST 请求中存活。
  3. 会话- 几乎类似于前一个选项,但数据将存储在服务器上。
于 2009-01-27T09:59:47.897 回答
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-视图状态

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

于 2009-01-27T07:58:47.360 回答
1

在查询字符串中传递它是一个不错的选择,这使得它“可破解”并且有利于 SEO。所以对于页码,除了网址,我永远不会考虑其他任何东西!

于 2009-01-27T07:51:01.340 回答