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!  web

相关文章
相关标签/搜索