ASP.NET页面间值传递的几种方法
创始人
2024-06-06 05:30:57
0

ASP.NET页面间值传递的方法主要是三种,QueryString,Session和Server.Transfer。实现页面间值的传递,也就可以跨越不同的页面,实现复杂的功能。

ASP.NET页面间值传递***种方法:

通过URL链接地址传递

  1. send.aspx:  
  2.   protected void Button1_Click(object sender, EventArgs e)  
  3.     {  
  4.         Request.Redirect("Default2.aspx?username=honge");  
  5.     }  
  6.  receive.aspx:  
  7.  string username = Request.QueryString["username"]; 

这样可以得到参数值。
 
ASP.NET页面间值传递第二种方法:

通过post方式。

  1. send.aspx  
  2.  
  3.  id="form1" runat="server" action="receive.aspx" method=post> 
  4.     
     
  5.          ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
  6.  ID="username" runat="server"> 
 
  •      
  • receive.aspx  
  • string username = Ruquest.Form["receive"]; 
  • ASP.NET页面间值传递第三种方法:

    通过session

    1. send.aspx:  
    2.   protected void Button1_Click(object sender, EventArgs e)  
    3.     {  
    4.         Session["username"] = "honge";  
    5.         Request.Redirect("Default2.aspx");  
    6.     }  
    7.  receive.aspx:  
    8.  string username = Session["username"]; 

    这样可以得到参数值。

    第四种方法:

    通过Application

    1. send.aspx:  
    2.   protected void Button1_Click(object sender, EventArgs e)  
    3.     {  
    4.         Application["username"] = "honge";  
    5.         Request.Redirect("Default2.aspx");  
    6.     }  
    7.  receive.aspx:  
    8.  string username = Application["username"]; 

    这样可以得到参数值。

    第五种方法:

    通过Server.Transfer

    1. send.aspx:  
    2.  
    3.   public string Name  
    4.     {  
    5.         get {  
    6.             return "honge";  
    7.         }  
    8.     }  
    9.     protected void Button1_Click(object sender, EventArgs e)  
    10.     {  
    11.         Server.Transfer("Default2.aspx");  
    12.     }  
    13.  
    14.  receive.aspx:  
    15.  
    16.    send d = Context.Handler as send ;  
    17.         if (d != null)  
    18.         {  
    19.             Response.Write(d.Name);这样可以得到参数值。  
    20.         } 

    如果在asp.net 2.0中还可以这样用:通过PreviousPage

    1. PreviousPage d = Context.Handler as PreviousPage ;  
    2.  if (d != null)  
    3.         {  
    4.             Response.Write(d.Name);这样可以得到参数值。  
    5.         } 

    也可以这样用:

    1. send.aspx:  
    2.  ID="btnSubmit" runat="server" PostBackUrl="~/reveive.aspx" Text="Submit" /> 
    3. receive.aspx:  
    4. <%@ PreviousPageType VirtualPath="~/Default.aspx" %> 
    5. string name = PreviousPage.Name; 

    这样可以得到参数值。

    如果你的页面中用到了MasterPage的话 Server.Transfer 传递的 PreviousPage就无效了,不知道这是什么原因.所以在用到MasterPage的话,***用Session或是Context.Items["username"]来实现.

    使用QueryString

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

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

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

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

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

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

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

    源页面代码:

      

    1. private void Button1_Click  
    2.   (object sender, System.EventArgs e)  
    3.   {  
    4.    string url;  
    5.    url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;  
    6.    Response.Redirect(url);  
    7.   } 

    目标页面代码:  

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

    使用Session变量

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

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

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

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

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

    5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它

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

    源页面代码:

    1.   private void Button1_Click  
    2.   (object sender, System.EventArgs e)  
    3.   {  
    4.    file://textbox1 and textbox2 are webform  
    5.    file://controls  
    6.    Session["name"]=TextBox1.Text;  
    7.    Session["email"]=TextBox2.Text;  
    8.    Server.Transfer("anotherwebform.aspx");  
    9.   } 

    目标页面代码:

    1.   private void Page_Load  
    2.   (object sender, System.EventArgs e)  
    3.   {  
    4.    Label1.Text=Session["name"].ToString();  
    5.    Label2.Text=Session["email"].ToString();  
    6.    Session.Remove("name");  
    7.    Session.Remove("email");  
    8.   } 

    使用Server.Transfer
      

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

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

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

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

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

    5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

    以下代码综合实现上述步骤过程的代码:

    源页面代码:

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

    1.      public string Name  
    2.   {  
    3.    get  
    4.    {  
    5.    return TextBox1.Text;  
    6.    }  
    7.   }  
    8.   public string EMail  
    9.   {  
    10.    get  
    11.    {  
    12.    return TextBox2.Text;  
    13.    }  
    14.   } 

    然后调用Server.Transfer方法

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

    目标页面代码:

    1.   private void Page_Load  
    2.   (object sender, System.EventArgs e)  
    3.   {  
    4.    file://create instance of source web form  
    5.    WebForm1 wf1;  
    6.    file://get reference to current handler instance  
    7.    wf1=(WebForm1)Context.Handler;  
    8.    Label1.Text=wf1.Name;  
    9.    Label2.Text=wf1.EMail;  
    10.   } 

    总结

    本文讲述了使用不同的方法实现了ASP.NET页面间值传递,这三种方法是:QueryString,Session和Server.Transfer,我们应该反覆体会几种方法的异同。我希望本文能给你有用的助益,直到在你的代码中运用自如!

    【编辑推荐】

    1. 深入研究Repeater控件:***的灵活性
    2. DataList控件入门介绍
    3. DataGrid Web控件运作机制探秘
    4. 小议ASP.NET数据Web控件之间的相似性
    5. 从传统ASP到ASP.NET的转变:了解控件

    相关内容

    热门资讯

    如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
    如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
    施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
    20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
    德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
    为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
    《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
    2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...