代码之家  ›  专栏  ›  技术社区  ›  jaloplo

如何在嵌套的用户控件中模拟回发?

  •  1
  • jaloplo  · 技术社区  · 17 年前

    我正在用一个页面执行ASP.NET应用程序。在这个页面中,我定义了一个用户控件。这个用户控件也定义了一个菜单(三个按钮)和三个用户控件。根据单击的按钮,三个用户控件中的一个将变为可见的“真”或“假”。

    在这三个用户控件中,我有一个按钮和一条消息,当单击菜单的按钮时,我想显示消息“It's not postback”,当单击用户控件的按钮时,消息将为“Yes,it's postback!”!.

    问题是,使用用户控件或页面的属性“IsPostback”,消息将永远不会是“It'sNotPostback”,因为单击了菜单上的按钮以显示嵌套的用户控件。

    这是页面的结构:

    page
      parent usercontrol
        menu
        nested usercontrol 1
          message
          button
        nested usercontrol 2
        nested usercontrol 3
    

    我知道可以使用viewstate完成,但是,有一种方法可以模拟is postback属性,或者知道真正的usercontrol何时回发?

    谢谢。

    1 回复  |  直到 16 年前
        1
  •  0
  •   jaloplo    17 年前

    我有这个问题的解决办法。当元素激发时,将事件发送到request.form集合中的服务器,因此我在嵌套的usercontrols中创建了一个属性,用于检查request.form集合中是否存在子控件(在usercontrol本身中定义):

    public bool IsUserControlPostBack
        {
            get 
            { 
                foreach (Control c in Controls)
                    foreach(string key in Page.Request.Form.AllKeys)
                        if( c.ClientID == key.Replace('$','_'))
                            return true;
    
                return false;
            }
        }
    

    此代码可以是UserControl的属性,如果多次调用,也可以是在UserControl的OnInit事件上设置的变量。

    推荐文章