简体   繁体   English

第二回发后,按钮无法触发OnClick

[英]After second post back, button can't fire OnClick

I have created a site that I have a MasterPage behind all pages, then a Page with a menu that load dynamically my UserControls, and inside that, one UserControl that have a menu that load dynamically others UserControls... 我创建了一个站点,在所有页面后面都有一个MasterPage,然后是一个带有菜单的Page,该菜单可以动态加载我的UserControl,在其中,一个UserControl的菜单可以动态加载其他UserControl ...

My problem is: The UserControl that have the menu, after I fire the OnClick event first time, I can't fire it again... Someone knows why ? 我的问题是:带有菜单的UserControl,在我第一次触发OnClick事件之后,无法再次触发它……有人知道为什么吗?

Code is below: 代码如下:

The Page: 这一页:

    public partial class AboutBrazil : BasePage
{
    private String LastLoadedControl_AboutBrazil
    {
        get
        {
            if (ViewState["LastLoadedControl_AboutBrazil"] != null)
            {
                return ViewState["LastLoadedControl_AboutBrazil"].ToString();
            }
            else
            {
                return "~/UserControl/AboutBrazil/ucIntroduction.ascx";
            }
        }
        set
        {
            ViewState["LastLoadedControl_AboutBrazil"] = value;
        }
    }

    private void LoadUserControl()
    {
        UserControl userControl = (UserControl)Page.LoadControl(LastLoadedControl_AboutBrazil);

        phAboutBrazil.Controls.Clear();
        phAboutBrazil.Controls.Add(userControl);

        userControl.ID = "myUserControl";
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        this.SetTitulo("About Brazil");

        LoadUserControl();
    }

    protected void btnLoadUserControl_Click(object sender, EventArgs e)
    {
        System.Drawing.Color foreColorI = System.Drawing.Color.FromArgb(102, 102, 102);
        System.Drawing.Color foreColorA = System.Drawing.Color.FromArgb(27, 41, 13);

        Button btnSender = (Button)sender;

        btnIntroduction.ForeColor = foreColorI;
        btnHistory.ForeColor = foreColorI;
        btnThePeople.ForeColor = foreColorI;
        btnBrazilianRegions.ForeColor = foreColorI;
        btnBrazilianEcosystem.ForeColor = foreColorI;
        btnGeneralInformation.ForeColor = foreColorI;
        btnTips.ForeColor = foreColorI;

        switch (btnSender.CommandArgument)
        {
            case "Introduction":
                btnSender.ForeColor = foreColorA;

                LastLoadedControl_AboutBrazil = "~/UserControl/AboutBrazil/ucIntroduction.ascx";
                break;
            case "History":
                btnSender.ForeColor = foreColorA;

                LastLoadedControl_AboutBrazil = "~/UserControl/AboutBrazil/ucHistory.ascx";
                break;
            case "The People":
                btnSender.ForeColor = foreColorA;

                LastLoadedControl_AboutBrazil = "~/UserControl/AboutBrazil/ucThePeople.ascx";
                break;
            case "The Brazilian Regions":
                btnSender.ForeColor = foreColorA;

                LastLoadedControl_AboutBrazil = "~/UserControl/AboutBrazil/ucTheBrazilianRegions.ascx";
                break;
            default:
                btnSender.ForeColor = foreColorA;

                LastLoadedControl_AboutBrazil = "~/UserControl/AboutBrazil/ucIntroduction.ascx";
                break;
        }

        this.LoadUserControl();
    }
}

The First User Control: 第一个用户控件:

        private List<String> listControl = new List<String>(new String[] { "Introduction", "North", "Northeast", "Middle-West", "South", "Southeast" });

    private String LastLoadedControl_TheBrazilianRegions
    {
        get
        {
            if (ViewState["LastLoadedControl_TheBrazilianRegions"] != null)
            {
                return ViewState["LastLoadedControl_TheBrazilianRegions"].ToString();
            }
            else
            {
                return "~/UserControl/AboutBrazil/TheBrazilianRegions/ucIntroduction.ascx";
            }
        }
        set
        {
            ViewState["LastLoadedControl_TheBrazilianRegions"] = value;
        }
    }

    private String LastClickedButton_TheBrazilianRegions
    {
        get
        {
            if (ViewState["LastClickedButton_TheBrazilianRegions"] != null)
            {
                return ViewState["LastClickedButton_TheBrazilianRegions"].ToString();
            }
            else
            {
                return "Introduction";
            }
        }
        set
        {
            ViewState["LastClickedButton_TheBrazilianRegions"] = value;
        }
    }

    private void LoadUserControl()
    {
        UserControl userControl = (UserControl)Page.LoadControl(LastLoadedControl_TheBrazilianRegions);

        phTheBrazilianRegions.Controls.Clear();
        phTheBrazilianRegions.Controls.Add(userControl);

        userControl.ID = "myUserControlNeasted";
    }

    private void LoadClickedButton()
    {
        foreach (String control in this.listControl)
        {
            HtmlTableCell tdControl = (HtmlTableCell)this.FindControl("td" + control.Replace("-", ""));

            if (control == this.LastClickedButton_TheBrazilianRegions)
            {
                tdControl.InnerHtml = "<div class=\"menuAtivoLeft\"></div><div class=\"menuAtivoCenter\"><div class=\"menuAtivoCenterContent\">" + this.LastClickedButton_TheBrazilianRegions + "</div></div><div class=\"menuAtivoRight\"></div>";
            }
            else
            {
                try
                {
                    Button btnButton = new Button();

                    btnButton.ID = "btn" + control.Replace("-", "");
                    btnButton.Text = control;
                    btnButton.CommandArgument = control;
                    btnButton.CssClass = "tableContentMenuContentButton";
                    btnButton.Click += new EventHandler(this.btnLoadUserControl_Click);

                    AsyncPostBackTrigger _Trigger = new AsyncPostBackTrigger();

                    _Trigger.ControlID = btnButton.ID;
                    _Trigger.EventName = "Click";

                    tdControl.Controls.Clear();
                    tdControl.Controls.Add(btnButton);

                    this.upTheBrazilianRegions.Triggers.Clear();
                    this.upTheBrazilianRegions.Triggers.Add(_Trigger);

                    btnButton.Dispose();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            tdControl.Dispose();
        }
    }

    protected override void OnPreRender(EventArgs e)
    {
        this.LoadUserControl();
        this.LoadClickedButton();
        base.OnPreRender(e);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void btnLoadUserControl_Click(object sender, EventArgs e)
    {
        Button btnSender = (Button)sender;

        switch (btnSender.CommandArgument)
        {
            case "Introduction":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucIntroduction.ascx";
                break;
            case "North":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucNorth.ascx";
                break;
            case "Northeast":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucNortheast.ascx";
                break;
            case "Middle-West":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/usMiddleWest.ascx";
                break;
            case "South":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucSouth.ascx";
                break;
            case "Southeast":
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucSoutheast.ascx";
                break;
            default:
                LastLoadedControl_TheBrazilianRegions = "~/UserControl/AboutBrazil/TheBrazilianRegions/ucIntroduction.ascx";
                break;
        }

        LastClickedButton_TheBrazilianRegions = btnSender.CommandArgument;

        this.LoadUserControl();
        this.LoadClickedButton();
    }

I solved the problem removing this line: 我解决了删除此行的问题:

AsyncPostBackTrigger _Trigger = new AsyncPostBackTrigger();

_Trigger.ControlID = btnButton.ID;
_Trigger.EventName = "Click";

this.upTheBrazilianRegions.Triggers.Clear();
this.upTheBrazilianRegions.Triggers.Add(_Trigger);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Button的OnClick事件不会触发 - Button's OnClick event doesn't fire 似乎无法触发OnClick事件 - Can't seem to make OnClick event fire 回发后通过背后的代码添加到更新面板的项目不会触发事件 - Event doesn't fire for an item that is added to the update panel through code behind after post back 最初禁用的按钮在被Javascript启用后不会回发 - Initially disabled Button won't post back after it is enabled by Javascript 为什么在第二次发回邮件后,asp按钮为动态生成的复选框发送false? - Why asp button sends false for dynamically generated checkboxes after second post back? Visual Web Developer html按钮onclick事件未触发 - Visual Web Developer html button onclick event didn't fire 按钮OnClick事件不会在UpdatePanel中第一次触发 - button OnClick event doesn't fire at the first time in UpdatePanel UserControl中的LinkBut​​ton回发但不会触发OnClick - LinkButton in UserControl posts back but does not fire OnClick 取消TabContainer中的选项卡更改后,不会触发按钮事件 - Button events don't fire after canceling a tab change in a TabContainer 为什么即使我不通过回发重新绑定,Repeater ItemCommand也不会触发? - Why Repeater ItemCommand Doesn't fire, even if i don't rebind by post back?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM