当前位置:编程学习 > C#/ASP.NET >>

今天问了一个很白痴的问题!!

我竟然一直认为禁用了EnabledViewState后,回传的值就不会显示出来了,实在是汗哪!我怎么这么菜呢! --------------------编程问答-------------------- 怎么的?
--------------------编程问答-------------------- 好像是控件状态无法保存。 --------------------编程问答-------------------- 哈哈,告诉你啊,以前俺也是这样认为滴.... --------------------编程问答-------------------- 一旦页面的控件很多,这种频繁的传递控件状态值对网络的消耗是很大的,因此,ASP.Net提供了EnableViewState属性,系统默认的值为true。当设置为true时,在传递状态值时就包括该控件;如果设置为false,则传递状态值时则不包括它。既然状态值不包括该控件,则客户端对它进行的操作,服务器端是不响应的。


我们可以做个实验,在Button1_Click事件中,编写代码:


ListBox.Items.Add(”客户端点击按钮一次!”);


此时运行该应用程序,单击网页上的按钮,在ListBox中会添加内容,不断地单击,内容则不断添加。如果我们将ListBox的EnableViewState属性改为false时,不断单击按钮,则只能添加一次。


这样有什么好处呢?如果我们在开发Web应用程序时,某些控件是不需要接受用户的操作或只需要接受一次操作的时候,我们可以将这些控件的EnableViewState属性改为false,这样可以优化我们的程序,提高网络访问的速度。
http://www.cnblogs.com/wayfarer/archive/2004/04/25/7574.html --------------------编程问答-------------------- EnableViewState设置为false,存在视图状态
保存控件结构 --------------------编程问答-------------------- EnableViewState=false  传递状态值到服务端就不包含它这个控件,它的改变值就传递不到服务端。
只是不更新操作到服务端了。视图状态什么都是存在的。 --------------------编程问答-------------------- enableviewstate=false就是不能改变控件的状态和值,他原来的状态和值是可以读出来的 --------------------编程问答-------------------- 不必自卑,反而对viewstate有了进一步的理解 --------------------编程问答-------------------- 我也不晓得 --------------------编程问答-------------------- 我也不晓得耶 --------------------编程问答-------------------- 我也是现在才知道有这么一回事。。 --------------------编程问答-------------------- 呵呵,对于TextBox的Text属性来说,首先在页面加载时它从ViewState里恢复了上一次输出html时的属性值,接着处理post值来客户端提交值,如果不相同就会将post来的值设置到Text属性,并且准备随后触发TextChanged事件。如果不支持ViewState,并且假设浏览器提交的值为“abc”,那么总是会触发TextChanged事件,即使再次输出html(这时会输出为<input type=text value='abc' />)并且客户端根本没有修改这个值,随后也会额外触发TextChanged事件——因为TextBox不知道真正的状态是abc,还以为原始是string.Empty。 --------------------编程问答-------------------- 来学习一下,顺便帮顶! --------------------编程问答-------------------- 哦,我说的“页面加载”是指服务器端处理客户端http请求命令时的页面生命周期。

ViewState是在页面不断地反复“输出html然后回发然后再次输出html”的过程中维系控件的状态,而浏览器端提交控件的value是另外一类操作。 --------------------编程问答-------------------- 很好,很强大。。。 --------------------编程问答--------------------
引用 12 楼 sp1234 的回复:
呵呵,对于TextBox的Text属性来说,首先在页面加载时它从ViewState里恢复了上一次输出html时的属性值,接着处理post值来客户端提交值,如果不相同就会将post来的值设置到Text属性,并且准备随后触发TextChanged事件。如果不支持ViewState,并且假设浏览器提交的值为“abc”,那么总是会触发TextChanged事件,即使再次输出html(这时会输出为<inpu……


对你说的“首先在页面加载时它从ViewState里恢复了上一次输出html时的属性值”有点小疑问。

假如textbox里面的内容非常多,那么viewstate的体积应该很大才对。但是我测试过在textbox里输入了很多的内容,viewstate的体积还是很小,这是怎么回事?


难道asp.net把textbox里面的值压缩到很小的地步? --------------------编程问答-------------------- 学习     回复内容太短了! --------------------编程问答--------------------
引用 16 楼 chaofd 的回复:
引用 12 楼 sp1234 的回复:
呵呵,对于TextBox的Text属性来说,首先在页面加载时它从ViewState里恢复了上一次输出html时的属性值,接着处理post值来客户端提交值,如果不相同就会将post来的值设置到Text属性,并且准备随后触发TextChanged事件。如果不支持ViewState,并且假设浏览器提交的值为“abc”,那么总是会触发TextChanged事件,即……


value值应该不会保存在viestate里

应该是直接从提交的post数据里取的吧 他是表单控件 --------------------编程问答-------------------- you are my best wife --------------------编程问答--------------------  引用“value值应该不会保存在viestate里

应该是直接从提交的post数据里取的吧 他是表单控件”


问题是:

如果不保存到viestate里,系统怎么知道文本框里的文本有变化呢?
--------------------编程问答-------------------- 输入的文本框的值是在你postback之后才会保存到viewstate里的。
viewstate永远只有"上一次操作"后的值。
补充:.NET技术 ,  非技术区
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,