Aug 13, 2008

Programming ASP.NET笔记:控件

第三章:控件:基本概念

 

控件是构建图形用户界面(GUI)的模块

Web控件包括四种类型:HTML控件;HTML服务器控件;ASP.NET服务器控件;用户控件和自定义控件。

ASP.NET服务器控件包括:文本,标签等;验证控件;数据源控件;数据视图控件;个性化控件;登陆控件和安全控件;母版页;富控件(rich controls

事件:执行程序有两种模式(二者并不是非此即彼的关系)线性模式和事件驱动模式。

线性模式的程序从第一步开始执行,直到所有步骤执行完为止;代码中的流控制结构(循环,IF或者方法调用)或许可以重定位程序的留,然而就本质而言,一旦程序开始执行,在用户或系统的操作下,它将一直运行下去。在有GUI环境之前大多数计算机程序都是线性模式。

时间驱动模式是指发生某些事情时进行响应。多数情况下事件由用户行为生成,但是由系统出发。服务器控件是可以触发事件的对象,用户在浏览器上对服务器控件所执行的任何行为都可能触发事件。

 

事件参数:事件依靠委托实现。委托是一个对象,它封装了对方法的描述,即处理事件所制定的任务

按照管理,所有ASP.NET事件处理程序都有两个参数,并且返回空值。第一个参数表示触发事件的对象,习惯称为sender。尽管这不是必要的;第二个参数称作事件参数,它包括事件信息的细节。如果有的话,对于多数事件,事件参数是EventArgs类型,它没有任何属性。因此,事件的通用原型为private void EventName (object sender , EventArgs e)

对于某些控件,事件参数可以从EventArgs类派生,并显示该事件类型的属性细节。例如,AdRotator控件的AdCreated事件处理程序,接收AdCreatedEventArg类型的参数,它有AdPropertiesAlternateTextImageUrlNavigateUrl属性。

 

应用程序事件和会话事件:当应用程序启动时,将触发Application_Start事件,这时,可以初始化整个应用程序中需要使用的各种资源。当应用程序停止时将触发Application_End事件,此时可以关闭资源,同时执行任何其他必要的日常管理。垃圾回收机制将自动释放内存。然而,如果分配了托管的资源,必须手工清楚

会话事件也是如此,当用户第一次请求应用程序页面时,会话开始。当应用程序关闭会话或会话超市,会话结束。当会话开始时触发Session_Start事件,可以初始化会话生命周期中使用的资源;会话结束时触发Session_End事件

 

页面和控件事件:页面和控件都包含事件,它们继承自control类(Error事件的情况下则继承自TemplateControl类)

部分公共的页面和控件事件:DataBindingDisposed当控件从内存中释放时发生;Error只在页面中(当抛出为处理的异常时发生),Init当控件初始化时产生,Load当控件加载到页面对象时发生;PreRender当控件准备输出时发生;Unload当控件从内存中卸载时发生

 

回传事件vs非回传事件

回传事件促使表单立刻回传到服务器。某些事件(典型的有修改事件如TextBoxTextChanged或者选择事件CheckBoxCheckedChanged)被认为是非回传的,因为事件并不立刻回传到服务器。这些事件由控件捕获知道再次发生回传。设置非回传事件控件的AutoPostBack属性为TRUE可以强制回传。

回传控件:Button,Calendar,DataGrid,DataList,FileUpload,GridView,ImageButton,ImageMap,LinkButton,Menu,Repeater

非回传控件BulletedList,CheckBox,CheckBoxList,DropDownList,ListBox,RadioButtonList,RadioButton,TextBox

 

IsPostBack

Page对象具有IsPostBack属性。这是一个制度的Boolean类型属性。可以指示页面是第一次加载还是为了响应客户端回传而进行的加载。你可以只在页面第一次加载时执行一些耗费资源的操作;如果页面回传到服务器并再次加载,就无需重复这些操作了因为任何输入或构建的数据都议被保留到后续的回传中

 

Visual Studio 2005中的事件

当新建一个Web应用程序时,VS将自动包含下面的代码,以便处理页面加载事件

Protected void Page_Load(object sender,EventArgs e)

{

}

每个页面都包含多个类似Page_Load,可创建处理程序的事件,这些预定义事件处理程序的名称由Page_连接时间名组成,下边的事件处理程序会自动关联到他们相对应的事件

Page_load    Page_AbortTransaction

Page_CommitTransaction     Page_DataBinding

Page_Disposed      Page_Error

Page_Init      Page_InitComplete

Page_Load     Page_LoadComplete

Page_PreInit    Page_PreLoad

Page_PreRender   Page_PreRenderComplete

Page_SaveStateComplete    Page_Unload

 

控件有其默认事件。多个控件可以公用一个时间处理程序。例如,有一个普通的按钮单击时间处理程序它可以处理船体上所有按钮的单击时间,通过测试sender参数值,可以确定触发事件的具体按钮。下列代码,单击按钮的时间处理程序将sender对象转换为Button类型,然后将该按钮ID属性赋值给一个字符串变量

Private void BtnClick(object sender , System.EventArgs e)

{

Button b = sender as Button;

String buttonID= b.ID;

Switch (buttonID)

{

  Case “btnDoThis”:

     //

  Case “btnDoThat”:

    //

}

//所有按钮的通用代码

}


ASP.NET中最为重要的是ASP.NET服务器控件,包含方法以及与之相关的时间处理程序,并且这些代码都在服务器端执行(部分服务器控件也提供客户端脚本,尽管如此这些控件事件仍然会在服务器端处理)

如果控件包括可视化组成部分(按钮,表格等)ASP.NET将在家侧目标浏览器接收能力的情况下为浏览器呈现传统的HTML,如果需要利用客户端脚本,将会生成适应于浏览器类型的脚本并发送给浏览器。

因为发送给客户端的是最普通的HTML代码所以ASP.NET应用程序可以运行在任何浏览器上。所有的处理过程都在服务器段完成。同时ASP.NET服务器控件在浏览器中最终呈现为标准的HTML代码。另外,所发送的脚本并非是必须经过优化的。

No comments:

Powered By Blogger