当前位置:  编程技术>.net/c#/asp.net

asp.net中viewstate 回发机制应用举例

    来源: 互联网  发布时间:2014-08-30

    本文导语:  在default.aspx页面中,添加:   代码示例: 以下是运行页面后的HTML代码:   代码示例: 首先是form表单自身,被解释成了,自动的给form1这个表单增加了action和method属性,method默认为post,action则指向页面本身。另...

在default.aspx页面中,添加:
 

代码示例:



以下是运行页面后的HTML代码:
 

代码示例:






首先是form表单自身,被解释成了,自动的给form1这个表单增加了action和method属性,method默认为post,action则指向页面本身。另外一个发生变化的就是form1表单中增加了一个id="__VIEWSTATE" 的隐藏域,这就是我们要讨论的ViewState

再举一个例子,向页面中添加一个Label一个TextBox还有一个Button。
 

代码示例:








然后,在Button1_Click中添加:
 

代码示例:
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text += "你好";
TextBox1.Text += "你好";
}

现在,来给Button1增加一些点击量,可以看到,Label控件和TextBox控件随着我们点击量的提高,其内容也在不断的变化,这种情况在Winform中非常常见,也很容易理解,可是ASP.NET是基于HTTP协议的,而HTTP协议是无状态协议。也就是说,服务器有健忘症,明明不久前刚刚给他发出过请求,创建了一个page对象,并做出响应。但是第二次请求到达的时候,服务器已经不认识你了(服务器会创建一个全新的page对象,和之前那个没有任何关系,再次给出响应)。在这种服务器有健忘症的恶劣条件下,要达到Winform一样的效果,真不是一件简单的事情。

给预编译指令Page增加一个属性EnableViewState="false"(禁用ViewState)之后,再重新运行页面,继续连续点击Button1,看这下是什么效果?大家会发现Label控件效果没有变化,但是TextBox控件内容却还在继续发生着变化。这是什么原因呢?其实只要查看一下源代码就会发现:
 

代码示例:

Label




  3个控件分别变成了span,文本框(text)和提交按钮(submit),当我们点击Button1时HTML会将要提交的表单中的所有表单控件的name和value属性用“&”连接成name=value的字符串,然后向action指向的页面,method指定的方式,发送请求。我们可以将表单的发送方式修改为get()再点击提交,就可以注意到地址栏的变化了。

  由于Label控件最终生成的标签是span,但是表单在提交时,不会提交span标签中的value,但是却会提交input中的value,所以服务器可以得到input最新的value,而由于没有发送span的value,所以服务器无法得到span最新的修改。这就是为什么当禁用ViewState时,Label不会变化,而input还是会发生变化的原因了。要解决这个问题,asp.net引入了ViewState,其实ViewState就是一个hidden隐藏域而已。表单不会发送span标记的value但是却会发送hidden控件的value,于是asp.net在给span标记赋值的时候,再给这个名叫ViewState的hidden控件记录一份,这样服务器就可以从hidden中获得Label标签原来的内容了。

  这就是ViewState的本质,当然在服务器端还有LoadViewState和SaveViewState方法。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ASP.NET之 Ajax相关知识介绍及组件图
  • 我想了解一些关于Java怎样与Asp或Asp.net结合方面在未来发展方向的问题?
  • c#/ASP.NET操作cookie(读写)代码示例
  • asp.net UrlEncode对应asp urlencode的处理方法
  • asp.net实例 定义和使用asp:AccessDataSource
  • win2008 r2 服务器环境配置(FTP/ASP/ASP.Net/PHP)
  • asp与asp.net的session共享
  • 如何在unix下发布asp?
  • 怎么让Apache支持Asp?
  • ??谁能把ASP代码改为JSP的
  • Linux平台下哪种方法实现ASP好?
  • ASP和ASP.Net共享Session解决办法
  • 通过socket和asp打交道
  • 犹豫中……,到底是选择ASP,还是JSP?
  • asp 是否 可用applet标签?帮忙!!
  • asp.net判断数据库表是否存在 asp.net修改表名的方法
  • 新人提问:asp+access的程序在linux下怎么改?
  • 用JAVA APPLET做的交互式网页和ASP、PHP做的相比有什么优势呢?
  • asp.net文字水印功能简单代码
  • asp里面可否使用java写的邮件,给30分.
  • asp与Jsp可否在iis中共存的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3