3
votes

I am fairly new to the asp.net and experimenting with it to learn the page life cycle. Here is a problem that I have been unable to resolve for past few days.

I have a hosting page (.aspx). Then I have two user controls (.ascx). The page has a place holder control in which it loads the user controls one at a time based on the application flow. First user control is loaded on application start up. It has a "continue" button. Continue button click loads the Second user control that has two buttons - "Back" and "Submit". Obviously the "Back" button should load the first user control again and Submit button should submit the form data. Pretty simple.

The problem is that the command button event handler that I have on the second user control is not firing the first time. (I have one event handler for both buttons). The load event of the user control fires but then it ignores the button click. If I click it again, then it fires. I re-load the controls on the page in every page_load. Here is some relevent code:

AddPlayer.aspx:

protected void Page_Load(object sender, EventArgs e) { PlaceHolder1.Controls.Clear();

        // Load the ctlInputPlayer control
        Control ctlToAdd = LoadControl("ctlInputPlayer.ascx", null);

        if (ctlToAdd != null)
        {
            _ctlInputPlayer = (ctlInputPlayer)ctlToAdd;
            _ctlInputPlayer.SendPlayerData += new EventHandler(ctlInputPlayer_SendPlayerData);
            PlaceHolder1.Controls.Add(_ctlInputPlayer);
        }

        // see if there is player data available in the view State
        PlayerData player = (PlayerData)ViewState["Player"];

        if (player != null)
        {
            ctlToAdd = LoadControl("ctlPlayerInfo.ascx", player);

            if (ctlToAdd != null)
            {
                _ctlPlayerInfo = (ctlPlayerInfo)ctlToAdd;
                _ctlPlayerInfo.SubmitPlayerData += new EventHandler(ctlPlayerInfo_SubmitPlayerData);
                PlaceHolder1.Controls.Clear();
                PlaceHolder1.Controls.Add(_ctlPlayerInfo);
            }
        }
    }

ctlPlayerInfo.ascx (second user control):

ctlPlayerInfo.ascx.cs

protected void CommandBtn_Click(object sender, CommandEventArgs e) { switch (e.CommandName) { case "Submit":

                //submitPlayerData will fire here
                break;

            case "Back":
               // editplayer data will fire here
                break;
        }
    }

protected void Page_Load(object sender, EventArgs e) {

// load control data here....

}

The page_Load fires every time but "CommandBtn_Click" doesn't fire after the first click. I have to do it click it again. It doesn't matter which order I click the buttons.

I appreciate the help. Let me know if more details are needed. Thanks!

1

1 Answers

1
votes

You should load your user controls every time in Page_Init and set the ID property.