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等我将在以后的文章详细说明。

转载于:https://www.cnblogs.com/-zda/p/4761013.html

在两个ASP.NET页面之间传递变量【转】相关推荐

  1. 在两个ASP.NET页面之间传递值

    引言 ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同 ...

  2. 经典面试题(三):ASP.NET部分----ASP.NET 页面之间传递值的几种方式

    ASP.NET 页面之间传递值的几种方式 1.使用QueryString,  如....?id=1; response. Redirect().... 2.使用Session变量. 3.使用Serve ...

  3. ASP.NET页面之间传递值的几种方式

    页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookie ...

  4. Asp.net页面之间传递参数的几种方法

    Asp.net页面之间传递参数的几种方法 第一种方法: 通过URL链接地址传递Request.QueryString send.aspx:    protected void Button1_Clic ...

  5. 在两个静态HTML页面之间传递参数的一个方法

    一个大型的监控平台,需要集成H3C的视频监控系统,集成的方式是通过静态页面.H3C提供一个页面的控件,直接在页面通过JS脚本调用.需要给这个控件传递一个摄像机的编号,传递后,页面的控件便显示出该摄像机 ...

  6. Asp.net页面之间传递参数的几种方法荟萃

    第一种方法: 通过URL链接地址传递  send.aspx:   protected void Button1_Click(object sender,EventArgs e)     {       ...

  7. ASP.NET 页面之间传递值的几种方式

    1.使用QueryString, 如....?id=1; response. Redirect().... 2.使用Session变量 3.使用Server.Transfer 4.Cookie传值 5 ...

  8. ASP.NET 页面之间传值的几种方式

    对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有3-5年经 ...

  9. Tips/Tricks#4:不同页面之间传递值

    注:此系列记录在我实际开发中遇到的问题和收藏一些技巧文章. 本篇技巧和诀窍记录的是:不同页面之间传递值,非常简单的技巧,我相信大家都知道. 这个场景太常见了,当然有许多许多的方法,我来介绍一种非常简单 ...

最新文章

  1. CentOS下MySQL的彻底卸载
  2. android冒烟测试自动化,自动化冒烟测试脚本应当遵循的原则
  3. VF01开票自动生成会计凭证
  4. 程序员相亲记之准博士mm
  5. pipenv ModuleNotFoundError: No module named ‘virtualenv.seed.via_app_data‘
  6. Forrester云原生开发者洞察白皮书,低代码概念缔造者又提出新的开发范式
  7. (01)VHDL介绍
  8. python经典教程游戏_使用pygame制作经典小游戏:五子棋
  9. 关闭 启动_win10系统关闭快速启动功能教程
  10. XP的常见蓝屏代码和解决方案
  11. python isinstance() type()
  12. 在Unity中使用.Net Remoting实现双向通信
  13. 除了深度学习,机器翻译还需要啥?
  14. Linux删除其中一行的快捷键,Linux 命令快捷键
  15. 优思学院|精益生产的前世今生
  16. Hadoop分布式集群的安装与部署实训总结报告
  17. FPGA+CUYSB3014实现USB3.0功能
  18. poi生成excel整理(设置边框/字体/颜色/加粗/居中/)
  19. 小红年龄是小梅的5倍c语言,5.四年级奥数-年龄问题.doc
  20. Tangent Element调色台的设计与功能

热门文章

  1. XCode 4.2.1 项目的几个模版说明
  2. jQuery循环滚动展示代码
  3. ASP.Net2.0小技巧 保持滚动条的位置 焦点移动到某个控件 $符号轻松的使用FindControl...
  4. Linux 性能监测
  5. node.js——麻将算法(四)胡牌算法的一些优化处理方案(无赖子版)
  6. COE、SOE、EOE、FOE是什么?
  7. oracle数据库报错: ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
  8. 【最快人脸检测模型开源】libfacedetection开源
  9. Google Colab 免费GPU 教程
  10. xlrd读取单元格演练