对于一个Web应用程序而言,在各个页面之间自由的跳转是是最基本的要求。ASP.NET为页面跳转供给了多种方法,这些方法之间有些细微的差别对于考试,或是高级的开发很是重要。下面我们结合实例来学习一下。
页面跳转方法主要的可以归纳五种:
一、哄骗Hyperlinks 控件;
二、Cross-Page技能,像Button这样的控件有一个叫PostBackUrl的属性,只要给这个属性设置一个URL就可以实现跳转;
三、Page类的Response属性的Redirect方法;
四、Page类的Server属性的Transfer方法;
五、Page类的Server属性的Execute。
她们之间的区别我们可以通过以下的例子直不雅的看出来。
起首,新建一个Web项目。新建一个名称为WebForm.aspx的页面,双击页面在Page_Load事件中添加如下代码:
Response.Write("WebForm.aspx Load<br/>");
之后在Default.aspx页面上放置一个HyperLink控件,同时将Text属性设置为"跳转到WebForm.aspx",NavigateUrl属性设置为"~/ WebForm.aspx"。表示在页面上显示"跳转到WebForm.aspx"字符串为一个超链,点击这串文字时跳转到"~/WebForm.aspx"页面,其中"~"表示当前网站的根目录,当然你也可以输入完整的URL。
再放置4个Button控件,将个Button的id和Text属性设置为不异值:CrossPage、Redirect、Transfer、Execute。
放置一个Literal控件,这个控件的作用是可以把作为HTML代码的字符串在页面上显示出来。
将CrossPage 按键的PostBackUrl属性设置为"~/WebForm.aspx",双击按键在Page_Load事件中添加代码:Response.Write("Click CrossPage Button<br/>");
双击Redirect按键,在Click事件中添加如下代码:
Response.Write("Before Redirect Button<br/>");
Response.Redirect("~//WebForm.aspx");
Response.Write("After Redirect Button<br/>");
双击Transfer按键,在Click
事件中添加如下代码:
Response.Write("Before Transfer Button<br/>");
Server.Transfer("~//WebForm.aspx");
Response.Write("After Transfer Button<br/>");
双击Execute1按键,在Click
事件中添加如下代码:
Response.Write("Before Execute1 Button<br/>");
Server.Execute("~//WebForm.aspx");
Response.Write("After Execute1 Button<br/>");
双击Excute2按键,在Click
事件中添加如下代码:
Response.Write("Before Execute2 Button<br/>");
System.IO.StringWriter wr = new System.IO.StringWriter();
Server.Execute("~//WebForm.aspx", wr);
Literal1.Text = wr.ToString();
Response.Write("After Execute2 Button<br/>");
最后在Page_Load事件中添加
Response.Write("Default.aspx Load<br/>");
预设时效果如图1
运行Default.aspx页面,浏览器打开Default.aspx页面并且会显示"Default.aspx"字样。当我们点击HyperLink控件或CrossPage按键,浏览器跳转到WebForm.aspx页面,并且显示"WebForm.aspx"字样,而CrossPage按键Click事件的"Click CrossPage Button"并没有输出。这两种跳转技能称为"Javascript跳转",在用户鼠标点击它们时,直接运行Javascript脚本进行跳转,而不需要传回到Web服务器上处理。二者的区别是HyperLink控件可以跳转到其他网站的页面,而CrossPage按键不行。
如果我们点击Redirecte按键,浏览器同样跳转到WebForm.aspx页面,并且显示"WebForm.aspx"字样,而Redirecte按键Click事件中的信息并没有输出。Response.Redirect方法打断了Web服务器对Default.aspx页面处理,径直转而处理WebForm页面,而Default页面进行到一半的处理全部丢弃。所以我们看不到Redirecte按键Click事件输出的信息。这种方式称为"客户端跳转"。由于跳转是在客户端出发的,打断了Web服务器的处理。这种方法可以跳转到其它网站。
如果我们点击Transfer按键,虽然浏览器也跳转到WebForm.aspx页面,但显示为:
Default.aspx Load
Before Transfer Button
WebForm.aspx Load
不像"客户端跳转",这里Web服务器并没有丢弃前一页面的处理,而是把进行到一半的处理转到第二个页面了。这种方式称为"服务端跳转",其独特的地方是:1)处理速度快;2)浏览器地址栏仍显示原来的URL;3)不能跳转到非ASP.NET页面或其它web服务器。
如果我们点Execute1按键,WebForm页面上的输出比Transfer按键的输出在最后又多了"After Execute1 Button"一句,成为:
Default.aspx Load
Before Execute1 Button
WebForm.aspx Load
After Execute1 Button
这种方式称为"应用程序间跳转",它没有打断Web服务器第一个页面的处理过程,而是另外开启一个线程处理第二个页面,终极的效果是将两个页面的处理结果合二为一。Execute2按键中程序的作用与Execute1按键类似,只不过哄骗Literal控件控制了合并方式。
由这五中页面跳转方式继而又会引发一个问题,那就是"确定调用页面的方式"。
![](https://img2024.cnblogs.com/blog/35695/202403/35695-20240328092537879-1189167464.jpg)