zoukankan      html  css  js  c++  java
  • ASP.NET四种页面导航方式之比较与选择

    在ASP.NET应用中,Web表单之间的导航有多种方式:超级链接,Response.Redirect,Server.Transfer,或者Server.Execute。

    一、超级链接  
    1.
    <a href="WebForm2.aspx">进入表单2</a>  
    2.
    <form id="Form1" method="post" runat="server">  
        <asp:HyperLink id="HyperLink1" runat="server"  NavigateUrl="WebForm2.aspx">进入表单2</asp:HyperLink>  
    </form>  

    二、Response.Redirect
    当Response.Redirect方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。
    这就是说,使用Response.Redirect方法时,重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。   
       
    三、Server.Transfer
    Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的(!!!)另一个ASPX页面。

    调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流;
    默认情况下,不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串;
    浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。 
     
    应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。   

    四、Server.Execute
    Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的(!!!)指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置;浏览器中的URL和标题不会改变。
    这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。 
    默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。 
    using System.IO;
    StringWriter sw = new StringWriter();
    Server.Execute("WebForm2.aspx", sw);
    Literal1.Text = sw.ToString(); 


    用Server.Transfer或Server.Execute方法实现导航时,还要注意一点:最后得到的页面可能不是合法的HTML页面,因为最终返回给客户端的页面可能包含多个<HTML>和<BODY>等标记。IE浏览器看来能够容忍并正确处理这类情形,但如果用户要用到其他的浏览器,最好仔细测试一下。   



    比较与选择:  

      ·如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。   

      ·如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。   

      ·如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。   
      ·如果要把用户连接到非ASPX的资源,例如HTML页面,使用Response.Redirect。   
      ·如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。   
      ·如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。

      ·如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。   

      ·如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。   

       


  • 相关阅读:
    1063. Set Similarity
    A1047. Student List for Course
    A1039. Course List for Student
    最大公约数、素数、分数运算、超长整数计算总结
    A1024. Palindromic Number
    A1023. Have Fun with Numbers
    A1059. Prime Factors
    A1096. Consecutive Factors
    A1078. Hashing
    A1015. Reversible Primes
  • 原文地址:https://www.cnblogs.com/xiaodi/p/121617.html
Copyright © 2011-2022 走看看