页面间传值

 
页面间传值1

本文共讨论了六种方法:
一.QuerySting
1.缺点: 传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递数组或对象。
2.优点: 实现起来非常简单,多用于传递一个或多个安全性要求不高或是结构简单的数值。
3.示例:
源页面formA.aspx 代码:
======================

protectedvoid Button_QuerySting_Click(object sender, EventArgs e)
{
stringurl ="formB.aspx?ID="+ this.TextBox_ID.Text+ "&Name="+

this
.TextBox_Name.Text;
Response.Redirect(url);
}


目标页面formB.aspx 代码:
========================

protectedvoid Page_Load(object sender, EventArgs e)
{
stringID= Request.QueryString["ID"
];
stringName =Request.QueryString["Name"
];
PopMsg(ID, Name);
}

publicvoid PopMsg(stringID,string
Name)
{
stringmsg ="ID:"+ ID + ",Name:"+ Name+"****** "
;
this.Label1.Text+=
msg;
//System.Web.HttpContext.Current.Response.Write("<script

language=javascript>alert('"+ msg + "');</script>");
}

二.Session
使用Session状态变量来保存在当前会话(单个用户)中位于本地的项;
1.缺点:
session是存放在服务器端的,存储过多的数据会消耗比较多的服务器资源,需要经常清理一些不需要的session,

以降低服务器内存资源的消耗;超过设定保存时间,切换用户,关闭了浏览器更换另一浏览器或更换了另一机器,其中保存

的数据将丢失;
2.优点:
作用于用户个人,跟着用户走的。但过量的存储会导致服务器内存资源的耗尽。因此适合保存少量,临时的信息; 可保

存自定义的类等;
3.应用场合:
保存登陆状态:超时很有用,当更换浏览器或机器时都自然地要求一个新的登陆。
保存取自数据库中的用户数据:本地缓存可避免每次请求都连接数据库。
保存临时的用户数据:临时数据包括查找结果,表单状态或无需长期保存的Guest购物车内容。
4. 示例:

publicclass UserInfo
{
//

// TODO: 在此处添加构造函数逻辑
//
public
UserInfo()
{ }
publicstringID =""
;
publicstringName =""
;
}

源页面代码:
protectedvoid Button_Session_Click(object
sender, EventArgs e)
{
Session[
"ID"]= this
.TextBox_ID.Text;
Session[
"Name"]= this
.TextBox_Name.Text;

UserInfo myInfo
=new
UserInfo();
myInfo.ID
=this
.TextBox_ID.Text;
myInfo.Name
=this
.TextBox_Name.Text;

Session[
"myInfo"]=
myInfo;

Server.Transfer(
"formB.aspx"
);
}
目标页面代码:
protectedvoid Button_session_Click(object
sender, EventArgs e)
{
PopMsg(Session[
"ID"].ToString(),Session["Name"
].ToString());

UserInfo myInfo
=(UserInfo)Session["myInfo"
];
PopMsg(myInfo.ID, myInfo.Name);

Session.Remove(
"ID"
);
Session.Remove(
"Name"
);
Session.Remove(
"myInfo"
);
//Session.RemoveAll();

}

5.配置Sessoin的使用策略:
我们可以在配置文件中配置Sessoin的使用策略:
<system.web>
<sessionState timeout ="20" cookieless ="true " mode ="InProc "></sessionState>
....
</system.web>
以上配置SessionState,表示每个Session超时为20分钟(20分钟内客户端没有任何操作)。cookieless表示

该会话是否使用Cookie作为标识ID。 mode=“Inproc”表示会话的存储位置为进程中,另外还有SQLServer,

stateServer,Customer等。这些配置可在网站发布之后进行。
它们的设置将会影响程序性能,所以最好深入理解这些取值的含义。请参考相关资料;

三.Server.Transfer
1.工作原理
它传递一个页面对象。
这种方法是简洁的同时又是面向对象的;可以在另一个页面以对象属性的方式来存取相应的值;
Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端执行新页并输出,在新页面中通过Context.

Handler 来获得前一个页面传递的各种数据类型的值、表单数据、QueryString.由于重定向完全在服务器端完成,

以客户端浏览 器中的URL地址是不会改变的。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另

一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。


2.Server.Transfer和Response.Redirect的区别。
(1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地址是不会改变的;Response.Redirect是客户端

完成,向服务器端提出新的页面处理请求,所以客户端浏览器中的URL地址是会改变的。
(2)Server.Transfer在服务器端完成,不需要客户端提出请求,减少了客户端对服务器端提出请求。
(3)Server.Transfer只能够转跳到本地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则十分

灵活,可以跳转到任何URL地址。
(4)Server.Transfer可以将前一个页面的各种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或

是结合上面四种办法把各种类型的值传到新的页面。
3.优点和缺点
优点:
1.直接在服务器端重定向,使用简单方便,减少了客户端对服务器端提出请求。
2.可以传递各种数据类型的值和控件的值。
缺点:
1.客户端浏览器中的URL地址是不改变,会导致在新的页面可能出现一些意想不到的问题。比如如果源页面和目的页面不

在同一个虚拟目录或其子目录下,那么使用相对路径的图片、超链接都会导致错误的指向。
源页面代码:
把以下的代码添加到页面中

UserInfomyInfo =new UserInfo();

publicstring
GsID
{
get{ returnthis
.TextBox_ID.Text;}
set{ this.TextBox_ID.Text=
value; }
}

publicstring
GsName
{
get{ returnthis
.TextBox_Name.Text;}
set{ this.TextBox_Name.Text=
value; }
}

public
UserInfo GsMyInfo
{
get{ return
myInfo; }
set{ myInfo =
value; }
}


然后调用Server.Transfer方法
protectedvoid Button_ServerTransfer_Click(object
sender, EventArgs e)
{
Context.Items.Add(
"Context","Contextfrom formA"
);

myInfo.ID
=this
.TextBox_ID.Text;
myInfo.Name
=this
.TextBox_Name.Text;

Server.Transfer(
"formB.aspx",true
);
}
目标页面代码:
//注意必须在 Page_Load 事件里才能获取;


protectedvoid Page_Load(object
sender, EventArgs e)
{

//createinstance of source web form

formAwf1;
//getreference to current handler instance

wf1= (formA)Context.Handler;

PopMsg(
"1:"+wf1.GsID,"1:"+
wf1.GsName);
UserInfo myInfo
=new
UserInfo();
myInfo
=
wf1.GsMyInfo;
PopMsg(myInfo.ID, myInfo.Name);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值