zoukankan      html  css  js  c++  java
  • asp.net(c#)网页跳转七种方法小结

    在asp.net下,经常需要页面的跳转,下面是具体的几种方法。跳转页面是大部编辑语言中都会有的,正面我们来分别介绍一下关于.net中response.redirect sever.execute server.transfer 三种页面跳转的方法

    ①response.redirect 
    这个跳转页面的方法跳转的速度不快,因为它要走2个来回(2次postback),但他可以跳 转到任何页面,没有站点页面限制(即可以由雅虎跳到新浪),同时不能跳过登录保护。但速度慢是其最大缺陷!redirect跳转机制:首先是发送一个http请求到客户端,通知需要跳转到新页面,然后客户端在发送跳转请求到服务器端。需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到session。 

    实例 
    Example that uses Redirect [C#; ASP.NET] 

    代码如下:

    using System; 
    using System.Web.UI; 
    namespace WebApplication1 

      public partial class List : Page 
      { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
          // Get response. 
          var response = base.Response; 
          // Redirect temporarily. 
          // ... Don't throw an HttpException to terminate. 
          response.Redirect("http://www.jb51.net", false); 
        } 
      } 


    Result of the page 

    代码如下:

    HTTP/1.1 302 Found 
    Content-Type: text/html; charset=utf-8 
    Location: http://www.jb51.net 
    Server: Microsoft-IIS/7.0 
    Date: Fri, 13 Aug 2010 21:18:34 GMT 
    Content-Length: 144 
    <html><head><title>Object moved</title></head>
      <body> 
        <h2>Object moved to <a href="http://www.dotnetperls.com/list">here</a>.</h2> 
      </body>
    </html> 
     
     

     ②sever.execute 
    这个方法主要是用在页面设计上面,而且他必须是跳转同一站点下的页面。这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中,将某一个页面类似于嵌套的方式存在于另一页面。 
    举个例子看看: 
    1、创建一个web form 
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件 
    代码如下: 

    代码如下:

    private void Button1_Click 
    (object sender, System.EventArgs e) 

      Server.Transfer("webform2.aspx"); 


    4、创建过程来返回TextBox1,TextBox2控件的值代码如下: 

    代码如下:

    public string Name 

      get 
      { 
        return TextBox1.Text; 
      } 

    public string EMail 

      get 
      { 
        return TextBox2.Text; 
      } 


    5、新建一个目标页面命名为webform2 
    6、在webform2中放置两个Label1,Label2 
    在webform2的Page_Load中添加如下代码: 

    代码如下:

    private void Page_Load 
    (object sender, System.EventArgs e) 

      //创建原始窗体的实例 
      WebForm1 wf1; 
      //获得实例化的句柄 
      wf1=(WebForm1)Context.Handler; 
      Label1.Text=wf1.Name; 
      Label2.Text=wf1.EMail; 

     ③server.transfer 
    速度快,只需要一次postback ,但是。。。。他必须是在同一个站点下,因为它是server的一个方法。另外,他能跳过登录保护。你可以写个小程序试试:设计一个由页面一到页面二的跳转,但要进入到页面二需要登录,form认证,但如果跳转语句使用transfer的话,那就不会弹出登录页面了。这个方法的重定向请求是发生在服务器端,所以浏览器的url地址仍然保留的是原页面的地址! 

    代码如下:


    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebForm1.aspx.cs" Inherits="WebForm1" %> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    <title></title> 
    </head> 
    <body> 
    <form id="form1" runat="server"> 
    <div> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
      <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 
    </div> 
    </form> 
    </body> 
    </html> 
    .net代码 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    public partial class WebForm1 : System.Web.UI.Page 

      public string Time 
      { 
        get { return DateTime.Now.ToString(); } 
      } 
      public string TestFun() 
      { 
        return "Function of WebForm1 Called"; 
      } 
      protected void Page_Load(object sender, EventArgs e) 
      { 
        Context.Items.Add("Context", "Context from Form1"); 
      } 
      protected void Button1_Click(object sender, EventArgs e) 
      { 
        //this.TextBox2.Text =Request ["TextBox1"].ToString (); 
        Server.Transfer("WebForm2.aspx", true);//第二个参数为false时,WebForm2.aspx中不能获得TextBox1的内容 
      } 

     总结: 
    如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。 
    ·如果要确保HTML输出合法,请使用Response.Redirect,因为Server.Execute 或者Server.Transfer方法返回给客户端的页面包含多个<Html><body>标记,不是合法的HTML页面,在非IE浏览器中可能会发生错误。 

    1.Response.Redirect("http://www.jb51.net",false); 
    目标页面和原页面可以在2个服务器上,可输入网址或相对路径。后面的bool值为是否停止执行当前页。 
    跳转向新的页面,原窗口被代替。" 
    浏览器中的URL为新路径。 
    :Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了 
    状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。这就是说, 
    使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求, 
    得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。 
    2.Server.Transfer("Default2.aspx?name=zhangsan",true); 
    目标页面和原页面可以在同一个服务器上。 
    跳转向新的页面,原窗口被代替。 
    波球论坛 浏览器中的URL为原路径不变。 
    默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成 
    True,就可以保留第一个页面的表单数据和查询字符串。 
    同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查
    (Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合, 
    必须把目标页面Page指令的EnableViewStateMac属性设置成False。 
    3.Server.Execute("Default5.aspx?address=beijing); 
    目标页面和原页面可以在同一个服务器上。 
    跳转向新的页面,再跳转会原页面。 
    浏览器中的URL为原路径不变。 
    当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。 
    这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把 
    被调用页面Page指令的EnableViewStateMac属性设置成False。 
    4.Response.Write("<script language='javascript'>window.open('aaa.aspx');</script>");_ 
    目标页面和原页面可以在2个服务器上,可输入网址或相对路径。 
    原窗口保留,另外新增一个新页面。 
    5.Response.Write("<script language='javascript'>window.location='Default2.aspx'</script>"); 
    打开新的页面,原窗口被代替。 
    6.Response.Write("<script>window.showModalDialog('Default2.aspx')</script>"); 
    7.Response.Write("<script>window.showModelessDialog('Default2.aspx')</script>"); 
    (一)、showModalDialog和showModelessDialog有什么不同? 
     showModalDialog:被打开后就会始终保持输入焦点。除非对话框被关闭,否则用户无法切换到主窗口。类似alert的运行效果。
     showModelessDialog:被打开后,用户可以随机切换输入焦点。对主窗口没有任何影响(最多是被挡住一下而以。:P) 
    (二)、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口? 
     在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<html>和<body>之间的

  • 相关阅读:
    【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】
    【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
    【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
    【Java EE 学习 34】【struts2学习第一天】
    【JavaScript中的正则表达式】
    【Java EE 学习 33 下】【validate表单验证插件】
    【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
    【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】
    【Java EE 学习 32 上】【JQuery】【选择器】
    【Java EE 学习 31】【JavaScript基础增强】【Ajax基础】【Json基础】
  • 原文地址:https://www.cnblogs.com/wangfuyou/p/5018400.html
Copyright © 2011-2022 走看看