网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [asp.net] 请问为什么GridView禁用ViewState会提高效率?
生活周刊
TW金牌会员
Rank: 6Rank: 6



UID 117203
精华 16
积分 1388
帖子 747
阅读权限 70
注册 2007-3-12
状态 离线
发表于 2008-8-28 14:11 资料 短消息 加为好友
请问为什么GridView禁用ViewState会提高效率?

假设这么一种情况:
%l:X%J%_/s9m-?(Z8[1、GridView第一次显示。 TechWeb-技术社区)u;U2t/E:?9y#^.n2k"R1^
2、用户Postback页面。
,S%E;L.k.u.H,W7Otech.techweb.com.cn3、那么在页面生存期的SaveViewState期间到底保存了什么? 难道他会把所有ViewState数据全部存起来吗?
-h!M)K7_.z)l6Itech.techweb.com.cn4、下一个PostBack发生时页面生存期的LoadViewState里又Load了什么? 程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛6j#W.T/G#M'm7E0[

5O:v(e;q9s细节问题,能不能举个例子说明一下呢?

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:15
上面写错了,

难道他会把所有GridView数据全部存起来吗?

ViewState应该是指保存对某些控件属性的Programmatic Change。

那上面这种情况。。。?

总之有些想不通。

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:15
In the save view state stage of the ASP.NET page life cycle, the Page class recursively iterates through the controls in its control hierarchy, invoking each control's SaveViewState() method.

The GridView stores all of its contents in the view state.

The GridView stores its contents in the view state so the page developer doesn't need to rebind the database data to the GridView on each and every page load, but only on the first one. The benefit is that the database doesn't need to be accessed as often. If, however, you set a GridView's EnableViewState property to false, you'll need to rebind the database data to the GridView on both the first page load and every subsequent postback.

你地明白?

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:16
如果和服务器没有交互,我是不启用ViewState的

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:16
所有属性都要存起来.
举个例子.
你在Page_load的if(!this.IsPostBack)中

给gridview 指定一个
DataSource,绑定 然后页面上放个按纽
点击一下,那么这个gridview还呈现在页面上,与第一次无异.然后你禁用掉ViewState再试.

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:16
保存了控件的状态,如果你每次GridView的数据都是从数据库来的,就可以禁用ViewState

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:16
哦..原来是这样..哈哈..我还真不知道..学习

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:17
GridView有很多的地方需要ViewState,随便就可以举出几十个。例如你随便设置7、8个Style集合中的一个,例如设置HeaderStyle集合中的某一项,或者设置一下PageSize属性,或者设置一下DataKeyNames,等等,你仅需要在某个事件中设置一次,控件自己就记住了状态值。你可以在页面上随便放一个Button并引发回发,你可以看到GridView逻辑正确,不会因为页面上其它某个地方的交互而丢失自己的状态值。

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:17
回答你的标题中提出的问题:为什么许多书上说“禁用ViewState会提高效率”?其实这是废话,如果什么都不做,“效率最好”,但是功能出不来了。所以废话永远不会犯错,把选择的责任推给你自己去权衡。

引用 回复 顶部
游客
未注册









发表于 2008-9-12 18:17
在EnableViewState为true的情况下,在SavaViewState期间会把属性值的改变存进ViewState里,然后在下一个PostBack的页面生存期的LoadViewState期间再读出来替换掉declarative markup里设置的原始值,这个我理解了。thank you, sp1234。

还有就是EnableViewState=true能减少数据库访问次数,但同时加大了下载量,还有post操作的时间。

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-11-23 08:44
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.036447 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP