VisualStudio2005系列
课程(6)
跟我一起学VisualStudio2005ASP.
NET2.0内部改进
徐长龙vsts_3710167@qq.com
前提
熟悉ASP.NET1.x熟悉VisualStudio.net
Level:200
议题
跨页投递高级缓存技术
什么是跨页投递?
在ASP.NET1.x中,Web窗体自动回发给它们的宿主页.即,当用户提交一个窗体时,窗体数据总是提交回包含该原始窗体的页面.在ASP.NET2.0中,Web窗体控件有一个新特性,让开发人员决定在进行提交操作时将窗体数据发送到何处.
如何实现跨页投递?
将实现IButtonControl接口的控件配置为发送至不同的目标页,例如:Button
System.Web.UI.WebControls.IButtonControl{stringPostBackUrl;eventSystem.EventHandlerClick;}
如何从源页获取信息?
获取来自页上控件的信息(即由浏览器发送的信息)
––––通过Page.PreviousPage属性获得源页的引用默认情况下,PreviousPage属性类型化为Page获得源页的引用后,通常使用FindControl方法来获取控件的信息如果源页和目标页位于不同的应用
程序中,则无法直接获取页上控件的值,但可以从Form字典中读取发送的数据.(Request.Form["控件名"])
if(Page.PreviousPage!=null){TextBoxSourceTextBox=(TextBox)Page.PreviousPage.FindControl("TextBox1");if(SourceTextBox!=null){Label1.Text=SourceTextBox.Text;}}
如何从源页获取信息?
FindControl方法在当前的命名容器中查找控件.如果要查找的控件位于另一控件内(通常位于模板内),则必须先获取对该容器的引用,然后才能在该容器中查找要获取的控件.
LoginLoginControl=(Login)PreviousPage.FindControl("Login1");if(LoginControl!=null){TextBoxUserName=(TextBox)LoginControl.FindControl("UserName");if(UserName!=null){Label1.Text=UserName.Text;}}else{Label1.Text="CannotfindusernameinLogincontrol.";}
如何从源页获取信息?
获取源页的公共属性
–在跨页发送的目标页中,也可以获取源页的公共成员的值.最常见的
方案是源页定义公共属性,并且您要在目标页上获取这些属性的值.–若要获取源页的公共成员,必须先获取对源页的强类型引用.
<%@PreviousPageTypeVirtualPath="~/SourcePage.aspx"%>
假如源页有一个公开的属性CurrentCity
Label1.Text=PreviousPage.CurrentCity;
如何从源页获取信息?
获取源页的公共属性
–获取对源页的强类型引用的另一种方法是将PreviousPage属性强制转换为源页类型
SourcePage_aspxsourcePage;sourcePage=(SourcePage_aspx)PreviousPage;Label1.Text=sourcePage.CurrentCity;
如果当前页不是跨页发送的目标,则PreviousPage属性返回null
检查目标页中的回发
在跨页回发过程中,源页控件的内容被发送至目标页,并且浏览器执行HTTPPOST操作(不是GET操作).但在目标页中,在跨页发送之后,IsPostBack属性仍然是false.尽管该行为是POST的行为,但跨页发送并不是到目标页的回发.并且目标页可以通过它的第一次代码如果要确定目标页是否由于跨页发送而正在运行.为此,您可以对目标页的PreviousPage属性返回的页引用的IsCrossPagePostBack属性进行测试