asp.net中的参数传递:Context.Handler 的用法
网上天天有人问怎么在webform页面之间传值,基本上来说,大家熟悉的是
(1)url字符串传值
(2)session传值
(3)直接读取server.transfer过来的页面上的数据
前面2个就不说了,大家都知道怎么用,后面一个可能用的人比较少,这里做一下介绍。
Web 窗体页是应用程序中的类,因此可以向处理任何类一样为它们创建属性。但是,由于 Web 窗体页实际上仅在执行页的过程中存在,它们的生命周期非常短。因此,Web 窗体页上属性的用途相当有限,因为它们仅在处理页的过程中存在。但是,如果使用特定的技术将控件从一页传递到另一页,后一页仍可以访问前一页上的属性。
比如现在在一个webform页面上(page.aspx)放置了一个label,在
private void Page_Load(object sender, System.EventArgs e)
{
this.Label1.Text="test";
}
我们设定了它的值,再为这个页面类设定一个公开的属性
public Label lab
{
get
{
return Label1;
}
}
返回的就是这个页面上的一个Label
然后在这个页面上放置一个按钮,按钮的click事件中添加如下代码
Server.Transfer("newpage.aspx");
在newpage.aspx中同样放置一个Label标签,用来显示前一个页面那个Label的值,然后在Page_Load里面加上如下代码
if (!IsPostBack)
{
page p=(page)Context.Handler;
this.Label1.Text="传过来的值是:"+p.lab.Text;
}
我们运行这个程序,点击按钮,发现出现值传过来了,但是浏览器的url显示的还是原来的page.aspx,说明server.transfer是不改变 浏览器的url的,其实这说明此事件仅仅是在服务器端完成,并没有到客户端,这也就是为什么能在无状态的http下得到前面一个页面的数据的原因,如果你 换成response.redirect,你是不能得到任何东西的。分析一下上面的代码newpage p=(newpage)Context.Handler的意思就是创建源页类的实例变量,然后可以向其分配 HTTP 对象(IHttpHandler类的一个实例),即接收初始请求的对象。这样传值的好处在于不像session一样使用内存,特别适合大数据的情况(其实 这不能称传值),坏处只能是同一个服务器页面之间,而且url并没有改变,用户看了可能会糊涂。
对程序你可以进一步改进,我们现在传的是一个Label的实例,你可以在页面间传递所有对象,甚至你可以直接使用前面一个页面的DataGrid!
asp.net中的参数传递:Context.Handler 的用法的更多相关文章
- ASP.NET中实现页面间的参数传递
ASP.NET中实现页面间的参数传递 编写人:CC阿爸 2013-10-27 l 近来在做泛微OA与公司自行开发的系统集成登录的问题.在研究泛微页面间传递参为参数,综合得了解了一下现行页面间传参 ...
- ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...
- [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?
注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...
- c#ASP.NET中页面传值共有这么几种方式
一.目前在ASP.NET中页面传值共有这么几种方式: 1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在 ...
- ASP.NET中实现页面间数据传递的方法
说到页面间数据传递,很多人都会想到通过像Session这样的全局变量,但是向Session中添加的东西太多会增加服务器的压力,页面间数据传递,数据的作用范围越小越好. ASP.NET页面间数据传递 ...
- uploadify在asp.net中的试用小结
花了差不多一下午的时间,总算把uploadify插件运行起来,在此对自己遇到的问题以及过程做一个小结. 一.使用步骤 1.在官网下载最新的插件包,并将包解压. 2.新建asp.net web项目,将解 ...
- Asp.net中Postback及Callback
我们知道,在默认的情况下,当我们点击Asp.net Page中的一个服务器Button时(默认其实是Submit Form),会导致Page被Recreated,这个过程我们称之为Postback,它 ...
- ASP.NET中页面传值
一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交, <form action= "target.aspx" method = "post&q ...
- ASP.NET中使用Server.Transfer()方法在页间传值 实例
以下代码在VS2008中测试通过 <%@ Page Language="C#" AutoEventWireup="true" CodeFile=" ...
随机推荐
- 安装-apache skywalking (java 应用性能监控)
官网:http://skywalking.apache.org/ 服务器:10.30.31.28 centos 7 jdk 1.8.x ES 5.x 5.0.0-bet a2版本 . http://s ...
- bat修改文件内容
#file.vbsSet fso = Wscript.CreateObject("Scripting.FileSystemObject")set f=fso.opentextfil ...
- javascript系列--认识并理解构造函数,原型和原型链
一.前言 介绍构造函数,原型,原型链.比如说经常会被问道:symbol是不是构造函数:constructor属性是否只读:prototype.[[Prototype]]和__proto__的区别:什么 ...
- IO流一些问题的总结
字节流的继承体系 字符流的继承体系 字符编码是什么?常见的字符编码表有哪些? 字符编码(英语:Character encoding)也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计 ...
- bolt继承关系和区别
先上个图: 具体区别: IRichBolt/IBasicBolt 区别IRichBolt和IBasicBolt IRichBolt继承自IBolt和IComponent.IBasicBolt继承自I ...
- Lab_1:练习4——分析bootloader加载ELF格式的OS的过程
一.实验内容 通过阅读bootmain.c,了解bootloader如何加载ELF文件.通过分析源代码和通过qemu来运行并调试bootloader&OS, bootloader如何读取硬盘扇 ...
- [转帖]OLAP引擎这么多,为什么苏宁选择用Druid?
OLAP引擎这么多,为什么苏宁选择用Druid? 原创 51CTO 2018-12-21 11:24:12 [51CTO.com原创稿件]随着公司业务增长迅速,数据量越来越大,数据的种类也越来越丰富, ...
- [转帖]Mysql各版本介绍及下载
Mysql各版本介绍及下载 http://blog.itpub.net/12679300/viewspace-1251661/ 原创 MySQL 作者:wzq609 时间:2014-08-15 10: ...
- lower_bound()和upper_bound()
lower_bound()和upper_bound() 是方便的在有序数组中二分查找的函数,并且在STL其他数据结构中也提供该方法(如map和set). 但是两函数并不是二分查找"小于&qu ...
- Linux中常用命令pipe
大多数linux命令处理数据后都会输出到标准输出,但是如果数据要经过系列列的步骤处理后,才是需要的数据个数,这种需求就需要管道来帮助完成. 管道命令使用"|"作为界定符,将界定符前 ...