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。   

       


  • 相关阅读:
    您认为做好测试用例设计工作的关键是什么?
    系统测试的策略
    在C/C++中static有什么用途?
    BUG管理工具的跟踪过程
    详细的描述一个测试活动完整的过程。
    输出一个整数的每一位,如:123的每一位是1 , 2 , 3
    编写代码模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”,密码错误, 可以重新输 入,最多输入三次。三次均错,则提示退出程序
    获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列
    求一个整数,在内存当中存储时,二进制1的个数。
    求两个正整数的最大公约数
  • 原文地址:https://www.cnblogs.com/xiaodi/p/121617.html
Copyright © 2011-2022 走看看