【问题标题】:Server controls on custom Web User Control's events not firing when added dynamically to page自定义 Web 用户控件事件上的服务器控件在动态添加到页面时不会触发
【发布时间】:2011-10-06 17:38:40
【问题描述】:

我在尝试在 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,其中有一个按钮来保存发布的文件,当我按下按钮时,页面被回发,但我的代码中的断点永远不会被击中,简而言之我需要知道在添加未将控件绑定到其正确事件的控件时是否做错了什么。如果我静态添加用户控件,则事件可以正常工作,只是用户可以在考试中添加他认为合适的尽可能多的问题,所以我必须动态添加它们。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您需要在页面生命周期的早期添加控件,例如OnInit。此外,请确保每次回发页面时为控件分配相同的 ID。

    另一种选择是使用DynamicControlsPlaceHolder,它将自动管理动态控件的持久性,无需任何额外代码:

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

    【讨论】:

    • 谢谢,控件是在页面生命周期的早期添加的,我尝试在 onInit 上添加它们,它的行为与现在由 PreInit 上的 Load 方法生成的行为相同(甚至早于前)。事件仍然没有触发。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多