在两个ASP.NET页面之间传递变量【转】
ASP.NET提供了事件驱动编程模型,使开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,在传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递变量,同样的事情,在使用事件驱动编程模型的ASP.NET就要麻烦一些,但是我们仍然有一些方法可以实现同样的功能。笔者在这里将包含使用querystring,session变量以及server.Transfer方法来实现页面间的变量传递。
使用QueryString
使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在很多传递的值少而安全性要求不高的情况下,这个方法还是较多地被首选使用。
使用这种方法包括如下的步骤:
a,使用控件创建web表单(form)
b,创建可以返回表单的按钮和链接按钮
c,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量
d,在保存的URL里添加QueryString参数
e,使用Response.Redirect重定向到上面保存的URL
下面的代码片断演示了如何实现这个方法:
源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
string url;
url="webform1.aspx?var1=" + TextBox1.Text + "&var2=" + TextBox2.Text;
Response.Redirect(url);
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Request.QueryString["var1"];
// Label1.Text=Request.QueryString["var1"] 也可以直写为 Label1.Text=Request["var1"]下面的语句也是一样可以简写
Label2.Text=Request.QueryString["var2"];
}
使用Session变量
使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:
a,在页面里添加必要的控件
b,创建可以返回表单的按钮和链接按钮
c,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里
d,使用Response.Redirect方法重定向到另一个页面
e,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它
在开始使用前,首先看一下如何的使用SESSION,和ASP中相差不多
写入SESSION变量:
C#:
Session["username"])="aa";
VB:
Session("username")="aa"
读取SESSINN变量:
C#
string username= Session["username"];
VB:
dim username=Session("username")
下面的是一段使用session的程序代码 :
源页面代码:
private void Button1_Click
(object sender, System.EventArgs e)
{
Session["var1"]=TextBox1.Text;
Session["var2"]=TextBox2.Text;
Server.Transfer("webform1.aspx");
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
Label1.Text=Session["var1"].ToString();
Label2.Text=Session["var2"].ToString();
Session.Remove("var1");
Session.Remove("var2");
}
使用Server.Transfer
这个方法相比上面介绍的方法稍微复杂一点,但在页面间变量传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:
a,在页面里添加必要的控件
b,创建返回值的Get属性过程
c,创建可以返回表单的按钮和链接按钮
d,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
e,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
以下代码综合实现上述步骤过程的代码:
源页面代码:
把以下的代码添加到页面中
public string Var1
{
get
{
return TextBox1.Text;
}
}
public string Var2
{
get
{
return TextBox2.Text;
}
}
然后调用Server.Transfer方法
private void Button1_Click
(object sender, System.EventArgs e)
{
Server.Transfer("webform1.aspx");
}
目标页面代码:
private void Page_Load
(object sender, System.EventArgs e)
{
//create instance of source web form
WebForm1 wf1;
//get reference to current handler instance
wf1=(WebForm1)Context.Handler;
Label1.Text=wf1.Var1;
Label2.Text=wf1.Var2;
}
后记:
笔者在上面使用不同的方法实现了ASP.NET页面间变量传递,这三种方法是:QueryString,Session和Server.Transfer,或许你还可以找到其他的办法来实现ASP.NET页面间变量传递,实际上你稍想点办法也可以将变量传递给页面自己(页面刷新特别是换页显示时传递新的页号等时比较常用)。
这里特别提下ruquest. QueryString 中的request对象实际上操作system.web 命名空间中的类httprequest。当客户发出请求执行asp.net时,CLR会将客户端请求信息包装在Request对象中。这些请求信息包括请求报头、客户端基本信息(浏览器信息、浏览器版本号、用户所用的语言、编码方式等)、请求方法(post、get)、参数名、参数值等。Request对象的调用方法为:
Request.collection[“variable”]
其中collection包括QueryStrin、Form、Cookies、ServerVariables四种集合,我们上面曾提到可以将Request.QueryString["var1"]写为Request["var1"]看起来比较简洁,但这样作其实不是一种好的方法,因为省掉collection选项后,Request会按照QueryString、Form、Cookies、ServerVariables的顺序进行搜索直到发现“variable”所指的关键字并返回其值,没有找到则返回(null)。因此为了提供程序的执行效率,最好还是指定collection,过多地搜索会影响程序执行的效率。置于Cookies、ServerVariables等我将在以后的文章详细说明。
在两个ASP.NET页面之间传递变量【转】的更多相关文章
- ASP.NET页面之间传递值的几种方式(转载)
页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...
- ASP中页面之间传递值的几种方式
ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryS ...
- ASP.NET页面之间传递值的几种方式
目录 QueryString Session Cookie Application 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中. ...
- [转]ASP.NET页面之间传递值的几种方式
页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...
- [转载]ASP.NET页面之间传递值的几种方式
页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...
- ASP.NET 页面之间传递值的几种方式
1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer4.Applicatio ...
- ASP.NET 页面之间传递参数方法
1.通过URL链接地址传递 (1) send.aspx代码 protected void Button1_Click(object sender, EventArgs e) { Request.Red ...
- 列举Asp.net页面之间传递值的几种方式和优缺点?
一.QueryString变量 优点:使用简单,对于安全性要求不高时传递数字或是文本值非常有效. 缺点:缺乏安全性,由于它的值暴露在浏览器的URL地址中的:不能传递对象. 二. 使用Applicati ...
- ASP.NET 页面之间传值的几种方式
开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...
随机推荐
- 六、 从Controller中访问模板数据(ASP.NET MVC5 系列)
在这一章节中,我们将创建一个新的MoviesController类,写代码获取movie数据并用视图模板将它们显示到浏览器中. 在我们进行下一操作之前先Build the application.如果 ...
- SparkMLlib回归算法之决策树
SparkMLlib回归算法之决策树 (一),决策树概念 1,决策树算法(ID3,C4.5 ,CART)之间的比较: 1,ID3算法在选择根节点和各内部节点中的分支属性时,采用信息增益作为评价标准.信 ...
- iOS学习之应用之间的操作(转发)
首先要说的是每一个APP都可以设置一个自己独有的URL,APP应用之间的操作就是通过这个URL来实现的! 1.如何配置自己应用的URL? 关于自己的URL,作为资深的程序猿都会想到 Info.plis ...
- 无声的吐槽csdn
上次朋友聚会,说csdn挺好的,我琢磨着,那好我也去注册一个.经过n次的注册(用户名那边老是验证不过,不给中文开头,然后随便填了一个),终于搞定了! 我想,不错啊,做了这么多限制,挺安全的感觉.然后我 ...
- Windows、Office系列产品精华部分集锦
提示 有了这个帖子麻麻再也不用担心我因为四处找Microsoft家的软件和系统而四处劳累所烦恼了! 首先,你们最爱的老XP同志,XP同志虽然退休了,但是依然坚持在岗位上,向他致敬!! Windows ...
- SQL Server中对存储过程的理解
数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL ...
- 2016计蒜之道复赛B题:联想专卖店促销
题解 思路: 二分答案,设我们要check的值为x. 注意到每一个礼包都有,一个U盘,一个鼠标. 剩余的,分别为一个机械键盘,一个U盘,一个鼠标. 当礼包数目为x时,我们至多可以提供a-x个普通,b- ...
- 查看c语言的函数运行时间的简单模板
/* clock():捕捉从程序开始运行到 clock() 被调用时所耗费的时间,时间单位 是clock tick, 即:"时钟打点". 常数CLK_TCK:机器时钟每秒所走的时钟 ...
- 从零开始的JS生活(三)——内置对象
咱们继续进行我们的正经的JS介绍.今天所要跟大家讲述的是JS中十分常用.十分常用.十分常用的内置对象. 一.世界上最熟悉的陌生就是,当你看着数组.而我看着你... - 数组对象 1.数组的概念 在内存 ...
- keyup实现在输入状态不发送搜索请求,停止输入后发送
个人需求:通过keyup事件配合后台elasticsearch(弹性搜索),用户在输入状态不发送请求,等停止输入后发送请求. 这是个思考笔记,因为项目临时需要弹性搜索功能,所以临时想了这么个法子,方法 ...