按钮单击事件未在用户控件中触发,在另一个用户控件中动态创建

时间:2017-03-13 15:28:14

标签: c# asp.net sharepoint user-controls web-parts

我有可视网络部分和两个用户控件。 在可视网络部件的Page_Load()上,我动态创建userControl1

protected void Page_Load(object sender, EventArgs e)
{
  UserControl1 userControl = Page.LoadControl(userControl1Path) as UserControl1;
  userControl.ID = "UserControl1";
  this.Controls.Clear();
  this.Controls.Add(userControl);
}

在UserControl1中我有一个按钮,它加载第二个用户控件(UserControl2)(并且它可以工作!):<​​/ p>

protected void GoToUserControl2_Click(object sender, EventArgs e)
{
  UserContol2 userControl = Page.LoadControl(userControl2Path) as UserContol2;
  userControl.ID = "UserContol2";
  this.Controls.Clear();
  this.Controls.Add(userControl);
}

UserControl2也有一个按钮,但是当我点击它时 - 单击事件不会触发。而不是按钮点击执行重定向到UserControl1。 即使按钮没有任何事件 - 它也会重定向到UserControl1

请帮帮我!

1 个答案:

答案 0 :(得分:1)

必须在每次加载页面时重新创建动态生成的控件,其中包括PostBack。因为第二个用户控件仅在按钮单击时加载,所以当执行另一个PostBack时它会消失。如果已创建UserContol2,则必须跟踪,如果已创建,请在父级的Page_Load中重新加载。在此代码段中,我使用Session来跟踪UserContol2的开放。

在按钮中设置会话单击方法

protected void GoToUserControl2_Click(object sender, EventArgs e)
{
    //rest of the code
    Session["uc2_open"] = true;
}

如果会话存在则检查Page_load,如果存在,则创建第二个用户控件。

protected void Page_Load(object sender, EventArgs e)
{
    UserControl1 userControl = Page.LoadControl(userControl1Path) as UserControl1;
    userControl.ID = "UserControl1";
    this.Controls.Clear();
    this.Controls.Add(userControl);

    if (Session["uc2_open"] != null)
    {
        UserContol2 userControl = Page.LoadControl(userControl2Path) as UserContol2;
        userControl.ID = "UserContol2";
        this.Controls.Clear();
        this.Controls.Add(userControl);
    }
}