DEV335:ASP.NETWebForms介绍,第二部分张宁SoftwareDesignEngineerContentManagementServerMicrosoftCorporation为什么使用ASP.NETWebForms?基于控件,事件驱动执行模型的WebUI快速应用开发(RAD)“VBfortheWeb”清晰的功能封装比ASP更少代码通过CLR运行native代码VisualBasic®,C#,JScript®比ASP更高性能与ASP应用同时运行(side-by-side)WebForms使用“.ASPX”扩展名相关专题DEV335–WebForms介绍,第一部分DEV331–黑带WebFormsDEV333–创建服务器控件:关键概念第一部分内容…基础:WebForm工作原理服务器端控件(ServerControls)用户控件(UserControls)第二部分内容…WebUI编程DataBindinginWebForms顶制服务器端控件(CustomServerControl)WebUI编程页面控件树(PageControlTree)Page类创建一个多层次控件树(hierarchicaltreeofcontrols)Page是树的根节点Statictext由LiteralControl类表示页面是通过顺序调用控件树中每个控件的Render()方法生成的用Trace显示页面生成控件树,第一步ASP.NETcontroltagsareparsed%@Pagelanguage=“VB”%htmlbodyformrunat=serverEnter:asp:TextBoxrunat=server//form/body/html控件树,第二步Controlsareassembledintoatree__PAGESystem.Web.UI.Pagectrl0System.Web.UI.LiteralControlctrl1System.Web.UI.HtmlControls.HtmlFormctrl3System.Web.UI.LiteralControlctrl4System.Web.UI.WebControls.TextBoxctrl5System.Web.UI.LiteralControlctrl2System.Web.UI.LiteralControl++RENDERORDER控件树,第三步Pageisrendered__PAGERendersas:ctrl0html\nbody\nctrl1formmethod=postctrl3\nEnterName:\nctrl4inputtype=textctrl5\n/formctrl2\n/body\n/html用Trace演示控件树UsingTraceToDisplayTheControlTreedemo操作控件树ManipulateControlTree1.把控件插入父节点的Controls集合2.得到一个控件实例:Dimbtn1asNewButton()btn1.Text=ClickMe3.插入控件层次树:myPanel.Controls.Add(btn1)用页面控件树构造动态WebUIdemoDataBindingInWebFormsWebFormsDataBinding提供一种简单,声明(declarative)的方式联系(bind)WebUI元素与数据“Simple”bindingtoasinglepropertyOrdirectlyintothepage“List”bindingtoadatasourceDataGrid,DropDownList,etc.支持多种数据源(datasource)但是…单向snapshot模型需用代码更新数据源SimpleBinding语法第一步:SetbindingsDeclaratively(inHTML):asp:LabelText=%#custID%…/第二步:CallDataBindSubPage_Load(sAsObject,eAsEventArgs)Label1.DataBind()EndSubSimpleBinding例子%@Pagelanguage=“VB”%scriptrunat=serverSubPage_Load(sasObject,easEventArgs)Label1.DataBind()EndSub/scripthtmlbodyasp:Labelid=Label1runat=serverText=%#DateTime.Now%//body/htmlBindingDataToListsDataGrid,DropDownList,etc.支持的数据源(DataSource)ADO.NETConnected:DataReaderADO.NETCached:DataSet,DataTable,DataView其它IEnumerable类型:ArrayList,ArrayHashtableResultofamethodListBinding语法第一步:SetbindingsDeclaratively(inHTML):asp:DataGridDataSource=%#ds%…/Imperatively(incode):DataGrid1.DataSource=ds;第二步:CallDataBindSubPage_Load(sAsObject,eAsEventArgs)DataGrid1.DataBind()EndSubDataBindingAListControldemoBindingToTemplatedLists模版(Templates)可随意定制UI定制结构,而不仅仅是风格(style)模版中可嵌套控件Repeater,DataList,DataGrid支持和非模版表(lists)同样的数据源Container:由模版和数据生成的元素的别名Container.DataItem“thisrowofdata”TemplatedList例子scriptrunat=serverSubPage_Load(sasObject,easEventArgs)DataList1.DataSource=GetCustData()DataList1.DataBind()EndSub/scripthtmlbodyasp:DataListid=DataList1runat=serverItemTemplate%#Container.DataItem(Name)%/ItemTemplate/asp:DataList/body/htmlDataBinder.EvalMethodHelpermethodforlate-bindingEveninC#!before:%#(((DataRowView)Container.DataItem)[Price“])%after:%#DataBinder.Eval(Container.DataItem,Price)%Optional3rdparamforformatting%#DataBinder.Eval(Container.DataItem,Price,{0:c})%DataBindingATemplatedListdemo定制服务器端控件CustomServerControlsCustomControls与UserControls的区别UserControls(a.k.a.,“pagelets”)容易编写–象page一样支持局部页面缓存(partialpagecaching)限于单个应用(Application)VS.NET提供有限的designtime支持定制控件(CustomControls)支持多个应用安装到GlobalAssemblyCache(GAC)VS.NET提供丰富的designtime支持创建一个定制控件1.从一个基类衍生(Derivefromabaseclass)Control,WebControl2.重载(Override)需要的方法(method)基类封装大部分功能3.在WebForm中使用定制控件Optional:ImplementinterfacestoprocessposteddataorexposeeventsOptional:UsemetadatatodefinepersistenceanddesigneroptionsOptional:提供designer和安装支持定制控件CustomControldemo总结基于控件,事件驱动的执行(Control-based,event-drivenexecution)简化开发(Simplerdevelopment)干净代码(Cleanercode)ControlTree,DataBinding和CustomControls是扩展您的.NETWeb应用的功能和灵活性的强大途经资源Quickstart:超过900+ASP.NET例子安装.NETFrameworkSDKIBuySpy例子:ASP.NET社区:如果您有任何问题,请上微软中文新闻组继续讨论加入微软中文新闻组©2002MicrosoftCorporation.Allrightsreserved.Thispresentationisforinformationalpurposesonly.Microsoftmakesnowarranties,expressorimplied,inthissummary.