基于COM和.Net视图状态的Asp.net
2014-04-23 13:06
155 查看
视图状态(view state)是在单个页面中保存信息的第一选择,ASP.NET Web控件也使用试图状态在回发间保存属性值。通过页面内建的 ViewState 属性,你可以把自己的数据放入到视图状态集合中,可以保存的信息类型包括简单数据类型和自定义对象。
基于COM的视图状态
在传统(基于COM)ASP下,在构建即将输出的HTTP响应时,WEB开发者需要手动为传入的窗体部件重新填充值。例如,如果传入的HTTP请求包括5个带有特定值的文本框,*aspx文件需要提取当前的值(通过Form或者Request对象的QueryString集合)并且手动把它们放回到HTTP响应流里(即拖放)。如果开发者没有设置这个操作,呈现给调用者的就是5个空的文本框!
基于.Net的视图状态
在ASP.NET下,我们不在需要手动删除和重新填充位于HTML部件内的值,因为ASP.NET运行时将自动嵌入一个隐藏的表单字段(名为_VIEWSTATE),其范围时浏览器和一个指定的页面之间。分配到这个字段的数据是一个64位编码的字符串,它包括一个描速当前页面上的INIT事件处理程序的作用域内访问web部件的状态最冒险)同时,恰恰在输出相应被提交回发出请求的浏览器之前,_VIEWSTATE数据被用来重新填充窗体部件。显然,ASP.NET最大的优点就是不需要任何用户参与。当然,如果愿意的话,用户总是能够与默认功能交互。需要注意的是,你是在*.ASPX文件中直接硬编码了ListBox内的项。你已经知道,在HTML表单内的<asp:定义将在最后的HTTP响应前自动提交会它们的HTML代码(假如他们有RUNAT=”SERBVER”特性)。最简短的一句话概括就是:在.NET下,较大的视图状态数据将自动被压缩,以减少该隐藏表单字段的大小。
下面的代码演示了页面如何使用视图状态,它允许用户保存一系列的值,并将其恢复。
public partial classChapter06_ViewStateTest : System.Web.UI.Page{protected void btnSave_Click(objectsender, EventArgs e){SaveAllText(this.Table1.Controls, true);
}
protected void btnRestore_Click(objectsender, EventArgs e){RestoreAllText(this.Table1.Controls, true);}
private void SaveAllText(ControlCollectioncontrols, bool saveNested){foreach (Control control in controls)
{if (control is TextBox)
{ViewState[control.ID] = ((TextBox)control)。Text;}
// bool类型的 saveNested 参数给方法提供了更大的灵活性 www.sytm.net // 可以控制是否需要递归
if (control.Controls !=null && saveNested){SaveAllText(control.Controls, true);
}
}
}
private void RestoreAllText(ControlCollectioncontrols, bool saveNested){foreach (Control control in controls)
{if (control is TextBox)
{if (ViewState[control.ID]!= null)
{((TextBox)control)。Text =ViewState[control.ID].ToString();}
}
if (control.Controls !=null && saveNested){RestoreAllText(control.Controls, true);
}
}
}
}
本文为Anyforweb技术分享博客,需要了解网站建设相关,请访问anyforweb.com。
基于COM的视图状态
在传统(基于COM)ASP下,在构建即将输出的HTTP响应时,WEB开发者需要手动为传入的窗体部件重新填充值。例如,如果传入的HTTP请求包括5个带有特定值的文本框,*aspx文件需要提取当前的值(通过Form或者Request对象的QueryString集合)并且手动把它们放回到HTTP响应流里(即拖放)。如果开发者没有设置这个操作,呈现给调用者的就是5个空的文本框!
基于.Net的视图状态
在ASP.NET下,我们不在需要手动删除和重新填充位于HTML部件内的值,因为ASP.NET运行时将自动嵌入一个隐藏的表单字段(名为_VIEWSTATE),其范围时浏览器和一个指定的页面之间。分配到这个字段的数据是一个64位编码的字符串,它包括一个描速当前页面上的INIT事件处理程序的作用域内访问web部件的状态最冒险)同时,恰恰在输出相应被提交回发出请求的浏览器之前,_VIEWSTATE数据被用来重新填充窗体部件。显然,ASP.NET最大的优点就是不需要任何用户参与。当然,如果愿意的话,用户总是能够与默认功能交互。需要注意的是,你是在*.ASPX文件中直接硬编码了ListBox内的项。你已经知道,在HTML表单内的<asp:定义将在最后的HTTP响应前自动提交会它们的HTML代码(假如他们有RUNAT=”SERBVER”特性)。最简短的一句话概括就是:在.NET下,较大的视图状态数据将自动被压缩,以减少该隐藏表单字段的大小。
下面的代码演示了页面如何使用视图状态,它允许用户保存一系列的值,并将其恢复。
public partial classChapter06_ViewStateTest : System.Web.UI.Page{protected void btnSave_Click(objectsender, EventArgs e){SaveAllText(this.Table1.Controls, true);
}
protected void btnRestore_Click(objectsender, EventArgs e){RestoreAllText(this.Table1.Controls, true);}
private void SaveAllText(ControlCollectioncontrols, bool saveNested){foreach (Control control in controls)
{if (control is TextBox)
{ViewState[control.ID] = ((TextBox)control)。Text;}
// bool类型的 saveNested 参数给方法提供了更大的灵活性 www.sytm.net // 可以控制是否需要递归
if (control.Controls !=null && saveNested){SaveAllText(control.Controls, true);
}
}
}
private void RestoreAllText(ControlCollectioncontrols, bool saveNested){foreach (Control control in controls)
{if (control is TextBox)
{if (ViewState[control.ID]!= null)
{((TextBox)control)。Text =ViewState[control.ID].ToString();}
}
if (control.Controls !=null && saveNested){RestoreAllText(control.Controls, true);
}
}
}
}
本文为Anyforweb技术分享博客,需要了解网站建设相关,请访问anyforweb.com。
相关文章推荐
- 一起谈.NET技术,ASP.NET应用下基于SessionState的“状态编程框架”解决方案
- 基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V3.3.9 Stable [开源]
- 基于Extjs的开源控件库 - http://extaspnet.codeplex.com/
- ASP.NET中的状态—基于服务器端的状态管理Session(二)
- asp.net控件开发(一)简单属性、视图状态、控件状态
- 关于Asp.net 页面动态加载用户控件,出现“未能加载视图状态”的原因
- asp.net视图状态消息身份验证错误解决
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- Asp.net视图状态的作用
- ASP.NET 2.0的视图状态持久性机制
- 基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V1.8.1 [开源]
- ASP.NET MVC 基于强类型视图下 对模型以及模型中List 字段的同时编辑 表单提交
- ASP.NET Post页面及验证视图状态MAC失败问题正确的解决办法
- ASP.NET状态管理之一(视图状态ViewState)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- ASP.NET 2.0的视图状态持久性机制
- asp.net的控件视图状态
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- ★★★【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术系列—(6)页面状态机制(视图状态和控件状态)】★★★
- Asp.Net 中ViewState—视图状态浅析