簡體   English   中英

動態添加到頁面的自定義Web用戶控件事件上的服務器控件未觸發

[英]Server controls on custom Web User Control's events not firing when added dynamically to page

在嘗試在ASPX頁面上動態添加Web用戶控件時遇到了一個小問題,我已經閱讀了頁面生命周期,並看到了一些建議,以便盡可能早地在頁面生命周期中添加動態控件。 截至目前,控件已在PreInit事件上創建,如以下代碼塊所示:

    protected override void OnPreInit(EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            lstQuestions = new List<ucQuestion>();
            Session["listQuestionss"] = lstQuestions;
            ucQuestion q = null;
            for (int i = 0; i < MIN_QUESTIONS; i++)
            {
                q = LoadControl("~/UserControls/Exam/ucQuestion.ascx") as ucQuestion;
                q.ID = String.Format("Question{0}", listQuestions.Count + 1);
                listQuestions.Add(q);
            }
        }
        else
        {
            if (Session["listQuestions"] != null)
            {
                listQuestions = Session["listQuestions"] as List<lstQuestions>;
            }
            else
            {
                Response.Redirect("~/Views/HR/Exams/AddExam.aspx");
            }
        }
        base.OnPreInit(e);
    }

然后在onInit上我有以下內容:

    protected override void OnInit(EventArgs e)
    {
        foreach (ucQuestion q in lstQuestions)
        {
            divQuestions.Controls.Add(q);
        }
        base.OnInit(e);
    }

ucQuestion用戶控件有一些標簽,一些文本框和一個帶有按鈕的FileUpload,用於保存發布的文件,當我按下按鈕時,頁面會被發布回去,但是我的代碼中的斷點永遠不會被命中,簡而言之,我需要知道在添加沒有將控件綁定到其適當事件的控件時是否做錯了什么。 如果我靜態添加用戶控件,則事件可以正常進行,只是用戶可以向他添加盡可能多的問題,因此我必須動態添加它們。

您需要在頁面生命周期的早期添加控件,例如OnInit 另外,請確保在每次回發頁面時都為控件分配相同的ID。

另一個選擇是使用DynamicControlsPlaceHolder ,它將自動管理動態控件的持久性,而無需任何其他代碼:

http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

暫無
暫無

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

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