当前位置:  编程技术>.net/c#/asp.net

C#页面之间跳转功能的小结

    来源: 互联网  发布时间:2014-10-17

    本文导语:  引言   ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同样的事情,在使用...

引言   ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同样的事情,在使用事件驱动编程模型的ASP.NET就不是那么容易了,当然了,我们仍然有一些方法可以实现同样的功能。本文将试着使用不同的可能的方法来解决这个问题,但可以预见是,本文将包含使用querystring,session变量以及server.Transfer方法来实现页面间的值传递。

使用QueryString 使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:

1,使用控件创建web表单(form)

2,创建可以返回表单的按钮和链接按钮

3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量

4,在保存的URL里添加QueryString参数

5,使用Response.Redirect重定向到上面保存的URL

下面

代码如下:

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

          string url; 
          url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;          
          Response.Redirect(url); 
 } 

目标页面代码:

代码如下:

private void Page_Load (object sender, System.EventArgs e)
 {
               Label1.Text=Request.QueryString["name"]; 
               Label2.Text=Request.QueryString["email"];
 }

的代码片断演示了如何实现这个方法:   源页面代码:

 使用Session变量   使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:

1,在页面里添加必要的控件

2,创建可以返回表单的按钮和链接按钮

3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里

4,使用Response.Redirect方法重定向到另一个页面

5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它 下面的代码片断演示了如何实现这个方法:

   源页面代码:

代码如下:

private void Button1_Click (object sender, System.EventArgs e)
 { 
          //textbox1 and textbox2 are webform 
          //controls
           Session["name"]=TextBox1.Text;  
           Session["email"]=TextBox2.Text; 
           Server.Transfer("anotherwebform.aspx"); 
}  

目标页面代码:

代码如下:

private void Page_Load (object sender, System.EventArgs e)
 {
             Label1.Text=Session["name"].ToString(); 
             Label2.Text=Session["email"].ToString(); 
             Session.Remove("name"); 
             Session.Remove("email"); 
}

Server.Transfer   这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:

1,在页面里添加必要的控件

2,创建返回值的Get属性过程

3,创建可以返回表单的按钮和链接按钮

4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面

5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了 以下代码综合实现上述步骤过程的代码: 

源页面代码:     把以下的代码添加到页面中

代码如下:

public string Name { get { return TextBox1.Text; } }

public string EMail { get { return TextBox2.Text; } }   

然后调用Server.Transfer方法

代码如下:

private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } 

目标页面代码:

在anotherwebform.aspx中务必在第一句话添加

代码如下:



然后在anotherwebform.aspx.cs中添加如下。

代码如下:

private void Page_Load(object sender, System.EventArgs e)
{
      //create instance of source web form
      WebForm1 wf1;
      //get reference to current handler instance
      wf1=(WebForm1)Context.Handler;
      Label1.Text=wf1.Name;
      Label2.Text=wf1.EMail;
}


补充:

Response.Redirect  实现页面跳转

  功能:重定向当前客户端浏览器连接到另一个URL页面。

      语法: Response.Redirect("字符串")

      说明:字符串是网页URL,可以是绝对路径或相对路径。

      也可以换用其重载方法Response.Redirect(“字符串”, false),若设置为true则当页面代码全部执行完毕或调用Flush或End方法后,服务器才将页面执行结果发送给客户端,否则服务器边执行边发送。ASP3.0以上版本默认值为true;Windows2000的IIS5中默认值也为true。

  Response.Redirect这个跳转页面的方法跳转速度不快,因为它要走两次回发(postback)。它可以跳转到任何页面,没有站点页面限制(可以由baidu跳转到google),但是不能跳过登录保护。速度慢是其最大的缺陷。

     其跳转机制为:首先是服务器端发送一个http请求到客户端,通知需要跳转到的新页面,然后客户端再发送跳转请求到服务器端。需要注意的是跳转后内部空间保存的所有数据信息将会丢失,所以需要用到Session.

2.Response.Redirect 打开新窗口的两种方法      

    一般情况下,Response.Redirect 方法是在服务器端进行转向,因此除使用 Response.Write("window.location='http://dotnet.aspx.cc';") 方法外,其他方法暂不能在新窗口打开所指定的  URL 地址的。

但是可以通过设置 form 元素的 target 属性,还是有办法打开新窗口的。下面就是可以采用的两种方法。

方法一:在服务器端设置 target 属性,这个方法也非常适用于客户端不支持脚本的情况。代码如下:

代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        form1.Target = "_blank";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }



   



   



办法二:采用客户端脚本的方法设置 target 属性。代码如下:

代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        Button1.Attributes.Add("onclick", "this.form.target='_newName'");
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }



   



   



上面两种方法中的 target 属性可以采用任何合法的名称,但要注意,如果相同名称的窗口已经打开,则新窗口会在已经存在名称的窗口里打开。

更新:如果需要设置弹出窗口的宽度和高度,可以修改为下面的方法:

代码如下:







    protected void Page_Load(object sender, EventArgs e)
    {
      string WindowName = "win" + System.DateTime.Now.Ticks.ToString();
      Page.RegisterOnSubmitStatement("js", "window.open('','" + WindowName + "','width=600,height=200')");
        form1.Target = WindowName;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("http://dotnet.aspx.cc");
    }




   



   



3. Server.Transfer 速度快,只需要一次postback,但它必须是在同一个站点内跳转。
Server.Transfer的重定向请求发生在服务器端,仅仅将此控件传递到新的网页并且不在客户端重新定位该网页,所以浏览器的url地址仍然是原页面的地址!另外,它能跳过登录保护。
默认情况下,Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但是如果把该方法的第二个参数设置成true,就可以保留原先页面的表单数据和查询字符串。
Server.Transfer("hyj.aspx");
//服务器停止执行本页,保存本页的当前数据后,再使页面转向hyj.aspx,并将跳转之前数据加上hyj.aspx页面执行的结果返回给浏览器。

4.Server.Execute这个方法主要是用在页面设计上,它必须是在同一个站点内跳转,也只需要一次postback。 这个方法是需要将一个页面的输出结果插入到另一个aspx页面的时候使用,大部分是在表格中将某一个页面类似于嵌套的方式存在于另一页面。 Server.Execute("hyj.aspx");//服务器保存此页的当前数据后,使页面转向到hyj.aspx执行,在hyj.aspx执行之后又返回本页继续执行,再将三者结果合并后返回给浏览器。 Execute方法跳转类似于函数调用。 如何选择页面重定向的方法: asp.net中页面跳转方式----Redirect、Transfer、Execute、超链接、HyperLink控件。 当需要把用户跳转到另一台服务器上的页面的时候 ,使用Redirect 当需要把用户跳转到非aspx页面时候,如html,使用Redirect 需要把查询字符串作为url一部分传给服务器的时候,使用Redirect,因为其他两种方法不能做到2次postback,把数据带回服务器 需要aspx页面间的转换(不涉及登录),使用Transfer 当需要把aspx页面的输出结果插入到另一个aspx页面的时候使用 Execute。 当需要用户来决定什么时候跳转页面,就使用超链接。 要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问各位大虾,怎么实现三层页面之间的参数传递?
  • JSP页面之间怎样传递参数?
  • 如何在页面之间传递参数,请举例!
  • 在线求救!!!如果在JSP页面之间传递多个参数?
  • 两个页面之间的控制??????????????(online)
  • 在JSP中如何实现用SESSION在多个页面之间传递变量!
  • asp.net页面与页面之间传参数值方法(post传值和get传值)
  • 页面之间传送变量的问题,呵呵,不要笑。
  • jsp中页面之间的跳转forward与sendRedirect的区别
  • JSP页面之间如何进行对象序列化传递???请教代码写法.I am online now。
  • 表单在页面之间传地数据时,发现中文都变成了“???”,请教
  • 通过javascript库JQuery实现页面跳转功能代码
  • 一JSP网站,统一指定一个errorPage页面,统一处理异常,在指定的errorPage页面中,我想知道具体是哪个页面出错的,即想知道出错页面的具
  • JavaScript实现页面跳转的几种方法(参考代码)
  • 求救!weblogic6.0后台运行正确,前台页面跳转或调用其他页面时出“页面无法显示错误”
  • HTML 5 <base> 标签-规定页面中所有链接的基准 url
  • jquery 父页面查找iframe子页面内容、子页面查找父页面内容
  • HTML <!DOCTYPE> 标签用法详解及如何解决<!DOCTYPE html>未声明时导致页面无效的问题
  • 请问applet怎么能与所在的页面进行通讯 即从页面中取得变量和把返回值返回给页面?
  • 页面刷新问题:所有的页面在打开时无论传递的参数是什么,打开的总是上一次打开页面的内容,必需刷新之后才能看到实际的网页。
  • 如何在让表单的提交页面出现在框架页面中。
  • 如何能够只打印,页面上的表格,页面上的上一页,下一页,还有按钮不打印
  • 请问怎么样能自动定向到另一个页面并且给那个页面传参数呀?
  • 诸位大瞎:jsp中不能写方法,可能是因为这个页面里的所有语句都在某个方法中。 我想问一下,怎么复用某个页面里的程序呢? 不用 bean,因为程序要显示很多 html,用 include 也不行,因为 页面有传入参数。
  • 在JSP中如何从一个页面转向另一个页面?
  • 为何我使用javascript中location'****.jsp'跳到某一页面,jsp页面不重新编译执行
  • ?启动jsp页面时,让页面刷新(一次)?
  • 当我修改了一个jsp文件之后刷新页面,为什么页面上的内容没有更新的呢?
  • jsp对页面的大小有否限制,我的页面在60多K之后就断掉了!!!
  • 改变一系列页面的页面风格问题
  • 让JSP页面过期, 保证每次JSP页面都是最新的.


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3