html button 跳转ASP.NET页面跳转技术总结

对于一个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控件控制了合并方式。

由这五中页面跳转方式继而又会引发一个问题,那就是"确定调用页面的方式"。