如何在嵌套的usercontrols中模拟回发?

时间:2009-04-29 10:49:35

标签: asp.net user-controls postback

我正在用一个页面做一个asp.net应用程序。在此页面中,我定义了一个usercontrol。此用户控件有一个菜单(三个按钮)和3个用户控件。根据单击的按钮,三个用户控件中的一个变为可见的真或假。

在这三个用户控件中,我有一个按钮和一条消息,当我点击菜单按钮时,我想显示消息“它不是回发”,当点击用户控件的按钮时,消息将是“是的,这是回发!!!“。

问题是使用usercontrol或页面的属性“IsPostBack”消息永远不会是“它不回发”,因为菜单的单击按钮显示嵌套的用户控件。

这是页面的结构:

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

我知道可以使用ViewState来完成,但有一种方法可以模拟IsPostBack属性或知道什么时候是真正的usercontrol回发?

感谢。

1 个答案:

答案 0 :(得分:0)

我有解决这个问题的方法。当一个元素触发时,事件被发送到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事件上设置的变量。