使用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 = 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。