簡體   English   中英

asp.net用戶控件事件傳播麻煩

[英]asp.net user control event propagation trouble

我有一個簡單的用戶控件,其中包含一些按鈕,用於觸發我希望由控件使用頁面處理的事件。 我有我的代碼設置:

public event EventHandler Cancel;
public event EventHandler Confirm;
public void Confirm_Click(object sender, EventArgs e)
{
    if (Confirm != null)
        Confirm(this, e);
}
public void Cancel_Click(object sender, EventArgs e)
{
    if (Cancel != null) 
        Cancel(this, e);
}

但是當我嘗試從使用控件的頁面加載事件的頁面調用這些時,我沒有得到任何自定義事件

ASPX代碼

<%@ Register TagPrefix="btg" TagName="CustomControl" Src="~/Search/CustomControl.ascx" %>
<btg:CustomControl ID="btgControl" runat="server" ></btg:CustomControl>

這可能是因為用戶控件中的按鈕位於更新面板中?

你不應該看到方法。 你應該看到事件。

在父頁面的加載中,您需要執行以下操作:

myUserControl.Cancel += new EventHandler(myUserControl_Cancel);

您可以點擊tab,tab來自動生成方法存根。 這將是:

void myUserControl_Cancel(object sender, EventArgs e) {}

然后,在用戶控件的方法中調用此代碼后將觸發此代碼。 為了激活該代碼,您必須將事件分配給用戶控件上的按鈕事件。

編輯:myUserControl是您的用戶控件的ID。 此外,有些人認為事件處理程序應該在頁面的init方法中。

編輯:

您的用戶控件是否在頁面中正確引用? 即您是在web.config中注冊用戶控件還是在頁面中使用引用指令?

另外,您是否嘗試過清潔解決方案並進行重建? 如果動態創建/加載了用戶控件,則必須在與實例化控件相同的范圍內連接事件。 要動態加載用戶控件,您必須在頁面中放置占位符並執行以下操作:

UserControl control = Page.LoadControl("~/ControlPath/ControlName.ascx");
((MyUserControlClass)control).Cancel += += new EventHandler(myUserControl_Cancel); // etc...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM