ASP.NET中ViewState的替代方案是什么?

4

目前我正在使用ViewState来存储正在分页查看数据时所在的当前页面编号。页面上有3个控件可供我分页查看数据。

到目前为止,跟踪页面编号最简单的方法就是使用ViewState,但它变得非常大,而我不知道为什么会这样。

因此,我想使用其他方法来跟踪页面编号,但我不确定该使用什么。我应该将其嵌入到隐藏的表单字段中吗?通过查询字符串传递它?还有其他好的选择吗?

4个回答

6
您在说明您正在使用ViewState来存储当前页数,并且我猜测您是在ViewState中明确地存储这个数字。
然而,默认情况下,asp.net会将大量的数据存储在ViewState中。在您的示例中,启用了分页的3个控件,asp.net将存储“控件中的所有数据”,即当前在这3个控件中显示的所有数据都将存储在ViewState中。
解决此问题的方法可能是显式地关闭3个分页控件上的ViewState,不幸的是,这意味着您将不得不在每个页面加载时重新绑定控件,这可能是可行或不可行的选择。
如果您只需要存储页面号码,例如,可以将其移入控件状态,如msdnpluralsight所述。
使用另一个答案中建议的查询字符串。
或者,您可以继续使用ViewState,然后继续关闭整个页面或仅分页控件的ViewState,具体取决于您的需求。
我真的建议阅读Mrunal Brahmbhatt的《真正理解ViewState》,以深入了解ViewState。

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

由于HTTP的无状态特性,选择存储状态比较困难。在您的示例中,我建议使用以下方法来替代ViewState:

  1. 查询字符串 - 页面编号足够小,可以很好地适应其中。
  2. Cookie - 在这种情况下,您的数据将持久存在,并且将通过所有GET和POST请求。
  3. 会话 - 几乎类似于上一个选项,但数据将存储在服务器上。

1

将其作为查询字符串传递是一个不错的选择,这使得它易于“黑客攻击”并且有利于SEO。因此,对于页面编号,我从未考虑过除了URL之外的任何其他选项!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接