我是asp.net的新手,并尝试用它来学习页面生命周期。这是我过去几天无法解决的问题。
我有一个托管页面(.aspx)。然后我有两个用户控件(.ascx)。页面有一个占位符控件,在该控件中,它根据应用程序流一次加载一个用户控件。在应用程序启动时加载第一个用户控件。它有一个“继续”按钮。单击继续按钮单击加载具有两个按钮的第二个用户控件 - “后退”和“提交”。显然,“后退”按钮应该再次加载第一个用户控件,“提交”按钮应该提交表单数据。很简单。
问题是我在第二个用户控件上的命令按钮事件处理程序第一次没有触发。 (我有两个按钮的事件处理程序)。用户控件的加载事件触发但随后忽略按钮单击。如果我再次点击它,它就会触发。我在每个page_load中重新加载页面上的控件。这是一些相关的代码:
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(第二个用户控件):
ctlPlayerInfo.ascx.cs
protected void CommandBtn_Click(object sender,CommandEventArgs e) { 开关(e.CommandName) { 案例“提交”:
//submitPlayerData will fire here
break;
case "Back":
// editplayer data will fire here
break;
}
}
protected void Page_Load(object sender,EventArgs e) {
//在这里加载控制数据......
}
每次都会触发page_Load,但第一次点击后“CommandBtn_Click”不会触发。我必须再次点击它。单击按钮的顺序无关紧要。
我很感激帮助。如果需要更多细节,请告诉我。谢谢!
答案 0 :(得分:1)
您应该每次在Page_Init中加载用户控件并设置ID属性。