VIEWSTATE是什么东西?

mengjun5200 2008-08-04 11:42:53
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkzNjc5MDkwNQ9kFgICAw9kFggCAQ8PFgIeBFRleHQFATFkZAIDDzwrAAkBAA8WBB4IRGF0YUtleXMWAB4LXyFJdGVtQ291bnQCA2QWBmYPZBYCAgIPFQMCMTYcPGZvbnQgY29sb3I9cmVkPmFkbWluPC9mb250PgVhZG1pbmQCAQ9kFgICAg8VAwEyBTIxMjEyCXdxd3F3cWUzMmQCAg9kFgICAg8VAwEzBjMyMzIzMggzMjIzMzQ0M2QCBQ8PFgIeB0VuYWJsZWRoZGQCCQ88KwAJAQAPFgQfARYAHwICCmQWFGYPZBYCZg8VBAE1FHV1anlpdThpaThpODg5ODk4OTg5FHV1anlpdThpaThpODg5ODk4OTg5FHV1anlpdThpaThpODg5ODk4OTg5ZAIBD2QWAmYPFQQBNhR1dWp5aXU4aWk4aTg4OTg5ODk4ORR1dWp5aXU4aWk4aTg4OTg5ODk4ORR1dWp5aXU4aWk4aTg4OTg5ODk4OWQCAg9kFgJmDxUEATcUdXVqeWl1OGlpOGk4ODk4OTg5ODkUdXVqeWl1OGlpOGk4ODk4OTg5ODkUdXVqeWl1OGlpOGk4ODk4OTg5ODlkAgMPZBYCZg8VBAE4FHV1anlpdThpaThpODg5ODk4OTg5FHV1anlpdThpaThpODg5ODk4OTg5FHV1anlpdThpaThpODg5ODk4OTg5ZAIED2QWAmYPFQQBORR1dWp5aXU4aWk4aTg4OTg5ODk4ORR1dWp5aXU4aWk4aTg4OTg5ODk4ORR1dWp5aXU4aWk4aTg4OTg5ODk4OWQCBQ9kFgJmDxUEAjEwBHl1ankEeXVqeQR5dWp5ZAIGD2QWAmYPFQQCMTEEeXVqeQR5dWp5BHl1anlkAgcPZBYCZg8VBAIxMgd5eXR5dXl1B3l5dHl1eXUHeXl0eXV5dWQCCA9kFgJmDxUEAjEzCXV5anVpdWlpdQl1eWp1aXVpaXUJdXlqdWl1aWl1ZAIJD2QWAmYPFQQCMTQHNjc2NzY2Nwc2NzY3NjY3BzY3Njc2NjdkZIA192bZPEO5GQ1n17vpxxzXpctp" />
</div>


比如这是我从我自己做的一个页面里拿出来,发现这个东西特别长,我听说这个东西多了就说明自己写的东西效率很差,不知道是不是这么回事,如果是,应该怎么避免呢
...全文
368 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
web(http1.1)是无状态的。但是asp.net很神奇地给你开发有状态页面,就是靠的viewstate。你的asp.net交互程序越酷,对viewstate很自然就越需要占用空间。可惜asp.net尽管已经提供了不同的解决办法,但是如果你不设置,默认还是在客户端页面来保存viewstate数据。我在以前在csdn上写过一个帖子,使用十几条代码,你就可以让所有页面上只有很小的可以忽略不计的 viewstate 字符,以加快网页上传下载速度。如果你发现客户端viewstate大了,就可以让你的页面如此处理。
shadowjl 2008-08-04
  • 打赏
  • 举报
回复
不能禁用的话,可以考虑重写loadviewstatefrompersitmedium和saveviewstatetopersitmedium方法,好像有个zip的开源项目,你可以用它来压缩和解压
超人Q 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mikko1986 的回复:]
是.net为了保存页面往返信息的一种机制,你可以理解为一种隐藏字段。你可以利用ViewState保存一些数据,比如ViewState["asdas"]="csdn";。减少viewstate的话一是使用html控件,二是把服务器端控件的EnableViewState属性设置成false。
[/Quote]
ViewState是页面级别的,用来记录状态信息
shadowjl 2008-08-04
  • 打赏
  • 举报
回复
视图状态来的,比如你的改变了一个标签的背景颜色,如果没有这个东西来保存的话,你一刷新那个背景颜色还是之前的那个,传输viewstate是要带宽的,大的话会影响性能,页面不是很丰富的话,影响不是很大,如果你的页面没有改变当前控件的状态,是可以禁用的。禁用并不表示不存在了,只是不会增长而已
sunchaohuang 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fuda_1985 的回复:]
这东西可以禁用滴!~~~
[/Quote]
jack20080808 2008-08-04
  • 打赏
  • 举报
回复
谁说这个东西多了就说明自己写的东西效率很差的,别信那些,这个东西是用来保存当前页面的一些控件的状态的,在页面加发的时候控件的状态不会丢失。
而VIEWSTATE占用的空间几乎是可以忽略不计的,唯一的缺点就是html代码不太美观,以前曾看到一位CSDN牛人对ViewState的巧用写了一篇文章,忘了叫什么了,你可以找找
mikko1986 2008-08-04
  • 打赏
  • 举报
回复
是.net为了保存页面往返信息的一种机制,你可以理解为一种隐藏字段。你可以利用ViewState保存一些数据,比如ViewState["asdas"]="csdn";。减少viewstate的话一是使用html控件,二是把服务器端控件的EnableViewState属性设置成false。
fuda_1985 2008-08-04
  • 打赏
  • 举报
回复
这东西可以禁用滴!~~~
chy3503319 2008-08-04
  • 打赏
  • 举报
回复
看看
shucaiguan 2008-08-04
  • 打赏
  • 举报
回复
非常讨厌的一个东西.
三下鱼 2008-08-04
  • 打赏
  • 举报
回复
相当于 页面的input hidden
catpk 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 oec2003 的回复:]
可以看作是頁面級的session
[/Quote]
说的有理 头一次见到
jack20080808 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]
web(http1.1)是无状态的。但是asp.net很神奇地给你开发有状态页面,就是靠的viewstate。你的asp.net交互程序越酷,对viewstate很自然就越需要占用空间。可惜asp.net尽管已经提供了不同的解决办法,但是如果你不设置,默认还是在客户端页面来保存viewstate数据。我在以前在csdn上写过一个帖子,使用十几条代码,你就可以让所有页面上只有很小的可以忽略不计的 viewstate 字符,以加快网页上传下载速度。如果你发现客户端viewsta…
[/Quote]
高手啊,我看得就是你的帖子,以前对ViewState无好感,现在改观了,哈哈
cheng_feng001 2008-08-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jack20080808 的回复:]
谁说这个东西多了就说明自己写的东西效率很差的,别信那些,这个东西是用来保存当前页面的一些控件的状态的,在页面加发的时候控件的状态不会丢失。
而VIEWSTATE占用的空间几乎是可以忽略不计的,唯一的缺点就是html代码不太美观,以前曾看到一位CSDN牛人对ViewState的巧用写了一篇文章,忘了叫什么了,你可以找找
[/Quote]
这东西确实会使页面代码量增大,并不仅仅是美观问题。它就是使用隐藏表单的形式记录页面在客户端的状态,页面回传时一并发回服务器端,这样,服务器端就可以清楚地知道客户端作了些什么(通过比较回发前后页面上各元素的状态),从而实现了模拟传统的WinForm程序开发模式。这是服务器端了解客户端状态付出的代价,当然,多数情况下,服务器端是不需要知道客户端的状态的,此时完全可以禁用ViewState,以提高性能。
oec2003 2008-08-04
  • 打赏
  • 举报
回复
可以看作是頁面級的session
koukoujiayi 2008-08-04
  • 打赏
  • 举报
回复
简单的说ViewState就是一个变量
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sp1234 的回复:]
例如用户在录入一个订单,用户需要录入个人信息,以及所订购的商品信息(品名、产地、数量、质量要求等)集合,这就可以完全放在ViewState中,仅当用户确认订单无误时才保存到数据库中。用户可以在一个桌面上同时开2、3个订单录入页面也不会有冲突。
[/Quote]

例如用户需要在录入商品新信息时及时看到价格,并且一边录入一边看到总金额,系统能够对更合适或者不合适的商品搭配给出提示,等等。总之,只有交互式程序才是更容易做到用户友好的。过分简单的页面,则只能靠图片、视频来吸引人,不能靠实用的功能。
  • 打赏
  • 举报
回复
例如用户在录入一个订单,用户需要录入个人信息,以及所订购的商品信息(品名、产地、数量、质量要求等)集合,这就可以完全放在ViewState中,仅当用户确认订单无误时才保存到数据库中。用户可以在一个桌面上同时开2、3个订单录入页面也不会有冲突。
西安风影 2008-08-04
  • 打赏
  • 举报
回复
ViewState不光会记住服务器控件的一些属性,
也可以手工设置值:ViewState["Hello"]="World"
比如升序降序的记录。
  • 打赏
  • 举报
回复
我一直推荐一个最基本的asp.net编程测试用例。就是你在页面上随便放一个Button,然后创建它的后台事件,但是什么也不用添加。当你测试页面时,时不时随机地点击这个button让页面回发,看看你的页面还能不能保持逻辑正确。如果能,那么你的asp.net程序逻辑要么简单得其实本应该使用asp等低级开发工具来开发就可以,要么就是一定是合理地使用了viewstate来提高用户操作体验的友好程度(当然,silverlight哪类富客户端编程工具做出的网页更友好)。
加载更多回复(1)

62,053

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧