Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义Web用户控件上的服务器控件';s动态添加到页面时不触发的事件_C#_Asp.net - Fatal编程技术网

C# 自定义Web用户控件上的服务器控件';s动态添加到页面时不触发的事件

C# 自定义Web用户控件上的服务器控件';s动态添加到页面时不触发的事件,c#,asp.net,C#,Asp.net,在尝试在ASPX页面上动态添加web用户控件时,我遇到了一个小问题,我已经阅读了页面生命周期,并看到了一些建议,建议尽可能早地在页面生命周期中添加动态控件。到目前为止,将在PreInit事件上创建控件,如下代码块所示: protected override void OnPreInit(EventArgs e) { if (!Page.IsPostBack) { lstQuestions = new List<ucQu

在尝试在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);
    }

ucQuestion用户控件有几个标签、一些文本框和一个带有按钮的文件上载,当我按下按钮时,页面会被发回,但我的代码中的断点从未被击中,简而言之,我需要知道在添加未将控件绑定到其正确事件的控件时是否有错误。如果我静态地添加用户控件,那么事件可以正常工作,只是用户可以在考试中添加他认为合适的任意多的问题,所以我必须动态地添加它们

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

另一个选项是使用
DynamicControlsPlaceHolder
,它将自动管理动态控件的持久性,而无需任何其他代码:


谢谢,这些控件是在页面生命周期的早期添加的,我已经尝试在init上添加它们,它的行为与现在相同,它们是通过PreInit上的Load方法生成的(甚至比以前更早)。事件仍然没有发生。
    protected override void OnInit(EventArgs e)
    {
        foreach (ucQuestion q in lstQuestions)
        {
            divQuestions.Controls.Add(q);
        }
        base.OnInit(e);
    }