首页 > 代码库 > asp.net页面间传值方式

asp.net页面间传值方式

  使用asp.net开发项目,必然会在页面间进行传值,本文介绍几种常见的页面传值方式,仅作笔记,以便后续查找使用。

  前提:新建两个页面:ValuePage.aspx,ObtainValue.aspx,本文介绍的几种传值方式都是在valuePage页面赋值,传递到ObtainValue.aspx页面中。

  在ValuePage.aspx前台新建两个textbox控件,ID分别为:tbUserName,tbPwd。ObtainValue.aspx页面上同样有两个textbox空间,ID:tbUserName,tbPwd,目的是为了接收从ValuePage.aspx传递过来的值。

 

  1、使用QueryString方式:

  ValuePage.aspx.cs代码: 

Response.Redirect("ObtainValue.aspx?userName=" + this.tbUserName.Text.Trim () + "&pwd=" + this.tbPwd.Text.Trim());

 

  ObtainValue.aspx.cs代码:

private void QueryString()        {            this.tbUserName.Text = Request.QueryString["userName"];            this.tbPwd.Text = Request.QueryString["pwd"];        }

 

  2、Session传值:

  ValuePage.aspx.cs代码:

Session["userName"] = this.tbUserName.Text.Trim();            Session["pwd"] = this.tbPwd.Text.Trim();            Response.Redirect("ObtainValue.aspx");

 

  ObtainValue.aspx.cs代码:

this.tbUserName.Text = Session["userName"].ToString();            this.tbPwd.Text = Session["pwd"].ToString();

 

  3、使用Application对象变量传值:

  ValuePage.aspx.cs代码:

Application.Lock();            Application["userName"] = this.tbUserName.Text.Trim();            Application["pwd"] = this.tbPwd.Text.Trim();            Application.UnLock();            Server.Transfer("ObtainValue.aspx");

 

  ObtainValue.aspx.cs代码:

Application.Lock();            this.tbUserName.Text = Application["userName"].ToString();            this.tbPwd.Text = Application["pwd"].ToString();            Application.UnLock();

  解析:Application.Lock和Application.UnLock一般配对出现,用于锁住Lock与UnLock之间的所有代码(注意不光锁住对于Application的赋值)。Lock(obj) 于用锁住obj对象,obj对象必须是全局对象(如:Application)。网站内任何一个网页执行Application.Lock的时候,整站中所有关于Application的操作都会被锁定延时执行。(包括:Application赋值和Application读取);而Lock(obj)则不会影响其他没有写Lock(obj)的页面。Application.Lock/UnLock比较安全,因为它是全局锁定所有的Application的,而Lock(obj)则更灵活,因为另一页面中如果没有写Lock(obj)则可以修改其他页面Lock住的内容。

 

  4、使用Cookie对象变量:

  ValuePage.aspx.cs代码:

HttpCookie cookieName = new HttpCookie("userName");
cookieName.Value = http://www.mamicode.com/this.tbUserName.Text.Trim();
Response.AppendCookie(cookieName);

HttpCookie cookiePwd = new HttpCookie("pwd", this.tbPwd.Text.Trim());
Response.AppendCookie(cookiePwd);

Server.Transfer("ObtainValue.aspx");

 

  ObtainValue.aspx.cs代码:

this.tbUserName.Text = Request.Cookies["userName"].Value.ToString();            this.tbPwd.Text = Request.Cookies["pwd"].Value.ToString();

  解析:与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。

 

   5、使用Server.Transfer方法:

  ValuePage.aspx.cs代码:

public string UserName        {            get { return this.tbUserName.Text.Trim(); }        }        public string Pwd        {            get { return this.tbPwd.Text.Trim(); }        }        protected void btnTransferValue_Click(object sender, EventArgs e)        {            Server.Transfer("ObtainValue.aspx");        }

 

  ObtainValue.aspx.cs代码:

private void TransferValue()        {            ValuePage valuePage;            valuePage = (ValuePage)Context.Handler;            this.tbUserName.Text = valuePage.UserName;            this.tbPwd.Text = valuePage.Pwd;        }

 

  

  在上文跳转到其他界面时使用Response.Redirect和Server.Transfer,此处简单介绍其区别:

  请求的过程: 
  1)浏览器aspx文件请求--->服务器执行--->遇到Response.Redirect语句->服务器发送Response.Redirect后面的地址给客户机端的浏览器--->浏览器请求执行新的地址 
  2)浏览器aspx文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件 
  可以见Server.Transfer比Response.Redirect少了一次服务器发送回来和客户端再请求的过程. 
  

  跳转对象: 
  1)Response.Redirect可以切换到任何存在的网页。 
  2)Server.Transfer只能切换到同目录或者子目录的网页. 
  

  数据保密: 
  1、Response.Redirect后地址会变成跳转后的页面地址。 
  2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。 
  

  传递的数据量(网址后附带的参数): 
  1、Response.Redirect能够传递的数据以2KB(也就是地址栏中地址的最大的长度)为限。 
  2、传递的数据超过2KB时,务必使用Server.Transfer。