• (原创)webform页面间传值的特殊方法


    网上天天有人问怎么在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!

  • 相关阅读:
    438. Find All Anagrams in a String
    406. Queue Reconstruction by Height
    581. Shortest Unsorted Continuous Subarray
    416. Partition Equal Subset Sum
    124. Binary Tree Maximum Path Sum
    240. Search a 2D Matrix II
    160. Intersection of Two Linked Lists
    6. ZigZag Conversion
    iOS tableView 数据处理,数据分类相同数据整合、合并计算总数总价
    iOS 讯飞语音测试没问题,一上线就用不了了
  • 原文地址:https://www.cnblogs.com/lovecherry/p/125514.html
Copyright © 2020-2023  润新知