动态创建按钮单击事件未触发

Spa*_*aig 1 c# asp.net

我对此做了一些研究,但我发现的解决方案似乎都没有为我的问题提供解决方案.我在C#中有一个asp.net Web应用程序,我想在从下拉列表中选择后动态添加提交按钮.

protected void Page_Load(object sender, EventArgs e)
{
    submitButton.Text = "Submit";
    submitButton.ID = "submitButton";
    submitButton.Click += new EventHandler(submitButton_Click);

    SelectionDropDownList.SelectedIndexChanged += new EventHandler(SelectionDropDownList_SelectedIndexChanged);

}


protected void SelectionDropDownList_SelectedIndexChanged(object sender, EventArgs e)
{
    switch (SelectionDropDownList.SelectedIndex)
    {
        case 1:
            //does a redirect
            break;
        case 2:
            Panel1.Controls.Add(submitButton);
            break;
        case 3:
            //does a redirect
            break;
    }
}

protected void submitButton_Click(object sender, EventArgs e)
{
    //can't get this event to fire.
    SubmitSearch();
}
Run Code Online (Sandbox Code Playgroud)

Ach*_*him 7

这是一个时间问题.你的程序流程是这样的:

  • 执行Page_Load,呈现页面.
  • 下拉菜单已被选中.回发后发送到服务器.Page_Load已执行.然后将事件发送到您的下拉列表实例.SelectedIndexChanged被执行.您的按钮已创建,页面将呈现并发送给客户端.
  • 按下按钮.回发后发送到服务器.Page_Load已执行.Asp尝试执行该事件,但该按钮不再存在.所以事件被忽略了.

这是Webforms令人讨厌的细节之一,也是不使用它的好理由 - 如果你可以自由选择的话.如果必须使用它,http://msdn.microsoft.com/en-us/library/ms178472.aspx可能会有所帮助.