[英]Button click event not firing within use control in ASP .Net
我正在開發一個asp網頁,其中我有一個下拉組合框和一個占位符。 當用戶從下拉組合框中選擇項目時,對服務器端進行回發,並且服務器將asp用戶控件加載到該父頁面中的占位符。 到目前為止,一切都很好。
在用戶控件中,我有一個按鈕,后面的用戶控制代碼被實現來處理按鈕點擊事件。 問題是,當我單擊此按鈕時,我可以看到回發被發送到服務器端(即在調試模式下調用父頁面Page_Load()),但是用戶控件的Page_Load()或按鈕單擊事件處理程序都是沒有被調用。
請幫忙..
一些額外的信息,
您需要確保UserControl存在,以便在重建viewstate時觸發按鈕單擊事件。
在Page_Load中加載UserControl將首次運行。 單擊按鈕並發生post_back時,尚未發生Page_Load。 這意味着UserControl將不存在,這意味着該事件無需連接備份按鈕。 因此,帶有按鈕的UserControl無法連接到click事件,並且click事件不會觸發。
建議您在此事件中加載您的用戶控件。
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//-- Create your controls here
}
嘗試沙盒測試 。 在page_load中,在Page_Load中動態創建一個帶有單擊事件的按鈕。 您將看到click事件不會觸發。 現在將按鈕移動到OnLoad事件。 點擊事件將觸發。 另請注意,click事件將發生在Page_Load事件之前。 進一步證明按鈕在正確的時間不存在。
您正在按鈕事件發生之前在頁面上重新加載usercontrol。 確保LoadControl方法位於If塊內
if (!IsPostBack)
{
//load usercontrol
}
Default.aspx的
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
}
UserControl.ascx
<h3>User control</h3>
<asp:Button ID="btn1" runat="server" OnClick="btn1_Click" Text ="Click me" />
UserControl.ascx.cs
protected void btn1_Click(object s, EventArgs e)
{
Response.Write("You clicked me, yay");
}
一切都像魅力。 當我點擊按鈕時,我看到“你點擊了我,yay”
關注點 。 如果您嘗試在下拉控件的SelectedItemChanged事件的處理程序中動態加載控件,則它將失敗,因為生命周期對ASP.Net頁面起作用的方式。 相反,您應該在頁面的PageLoad事件中處理此類控件創建,例如Default.aspx下面的示例
<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true">
<asp:ListItem Value="0" Text="--select a value--" />
<asp:ListItem Value="1" Text="User control 1" />
<asp:ListItem Value="2" Text="User control 2" />
</asp:DropDownList>
<asp:PlaceHolder runat="server" ID="ph1">
</asp:PlaceHolder>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
switch (ddl1.SelectedValue)
{
case "1":
var ctl = LoadControl("Controls/UserControl.ascx");
ph1.Controls.Add(ctl);
break;
case "2":
ctl = LoadControl("Controls/UserControl2.ascx");
ph1.Controls.Add(ctl);
break;
}
}
}
在我的特定情況下,我發現問題是UserControl ID(或者更確切地說是缺少)。
首次實例化UserControl時,我的按鈕ID為ctl00 $ ctl02 $ btnContinue,但在回發后它已更改為ctl00 $ ctl03 $ btnContinue,因此按鈕事件處理程序未觸發。
我改為使用固定ID添加我的UserControl,現在按鈕總是加載ID為ctl00 $ myUserControl $ btnContinue。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.