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!  

 

 

System.Web.HttpContext  
        Encapsulates   all   HTTP-specific   information   about   an   individual   HTTP   request.  
   
  HttpContext.Handler   Property  
        Gets   or   sets   the   IHttpHandler   object   for   the   current   HTTP   request  
   
  ASP.NET   generates   one   HttpContext   object   for   each   request   serviced   and   passes   the   context   object   to   HTTP   handlers   (of   which   System.Web.UI.Page   is   one).   When   you   call   Server.Transfer,   the   target   page   can   obtain   the   first   page   object   through   Context.Handler  
   
  see    
  Passing   Values   Between   Web   Forms   Pages  
  http://msdn.microsoft.com/library/en-us/vbcon/html/vbtskpassingvaluesbetweenwebformspages.asp?frame=true  
   
   
  ASP   .NET   Connection   Model   and   Writing   Custom   HTTP   Handler/Response   Objects    
  http://msdn.microsoft.com/msdnmag/issues/01/07/asp/default.aspx  

 

Page.Context   PropertySee  
        Gets   the   HttpContext   object   associated   with   the   page  
   
  [C#]  
  protected   override   HttpContext   Context   {get;}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值