ASP.NET页面之间传值方法

标签:页面传值
    在说方法之前,先看看为什么要传值。   
    在ASP.NET中,浏览器和Web服务器之间的连接是所谓的“无状态连接”。整个连接过程如下:

    1、连接到服务器
    2、告诉服务器访问者希望访问的内容
    3、服务器返回访问者需要的内容
    4、和服务器断开连接,同时丢失所有的用户信息

    所以,才会用下面这六种方法来达到保存特定的用户信息或页面信息的目的。

 

第一种方法:
    通过URL链接地址传递,也即QueryString。
    使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来 非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的( 不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。
 send.aspx:
  protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default2.aspx ?valuename=XXXX");
    }
 receive.aspx:
 string valueuser = Request.QueryString["valuename"] .ToString();
 string valueuser = Request.Params["valuename"] .ToString();
    这样就可以得到参数值了。

 

第二种方法:
    通过post方式。静态页和动态页都是一样的方法。
send.aspx
 <form id="form1" runat="server" action="receive.aspx" method="post">
    <div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click"  Text="Button" />
        <asp:TextBox ID="textboxname" runat="server"></asp:TextBox>
    </div>
 </form>
receive.aspx
 string textboxvalue = Ruquest["textboxname"];

 

第三种方法:
    通过session。

    它是针对具体用户的一种传值方法,参数值会跟着用户走,直到清除或退出。

    注意:在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。
send.aspx:
  protected void Button1_Click(object sender, EventArgs e)
    {
        Session["valuename"] = "XXXXXX";
        Response.Redirect("Default2.aspx");
    }
receive.aspx:
 string valueuser = Session["valuename"].ToString();

 Session.Remove("valuename");
    这样就可以得到参数值并释放掉该Session所占用的服务器资源了。

 

第四种方法:
    通过Application。

    针对所有站点浏览用户的一种传值方法,是全局的

    Application的原理是在服务器端建立一个状态变量,来存储所需的信息。

    注意:首先,这个状态变量是建立在内存中的,其次,这个状态变量是可以被网站的所有页面访问的。第三,就算一个用户关闭页面,其他用户打开页面,也还是会可以读取这个变量。这就意味着它只能存储一些要公布的信息,而不能存储一些比较个人的信息了!
send.aspx:
  protected void Button1_Click(object sender, EventArgs e)
    {
        Application["valuename"] = "XXXXXX";
        Response.Redirect("Default2.aspx");
    }
 receive.aspx:
 string valueuser = Application["valuename"].ToString();

 

第五种方法:
    通过Server.Transfer。

    这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的
send.aspx:
    public string Name
  {
   get
   {
   return TextBox1.Text;
   }
  }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Server.Transfer("Default2.aspx");
    }
 receive.aspx:
    private void Page_Load(object sender, System.EventArgs e)
  {
   file://create instance of source web form
   send wf1; //send为要传值过来的页面的页面类名
   
file://get reference to current handler instance
   wf1=(send)Context.Handler;
   Label1.Text=wf1.Name;
  }

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

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

也可以这样用:
send.aspx:
 <asp:Button ID="btnSubmit" runat="server" PostBackUrl="~/reveive.aspx"  Text="Submit" />
receive.aspx:
 <%@ PreviousPageType VirtualPath="~/Default.aspx" %>
 string name = PreviousPage.Name;这样可以得到参数值。

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

 

第六种方法:

    用cookie。

    它会在关闭浏览器后,还保存在用户端,这种方法一般建议用在用户信息值的保存,也就是与用户相关的信息。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值