请参阅Panel中的ascx控件

时间:2013-11-23 12:55:02

标签: c# webforms panel ascx

我继承了一个ASP.NET应用程序,它有一个页面,其中UserControls动态添加到面板(或ContentPlaceHolder),每个UserControl有几个控件来显示信息,一个RadioButtonList接受用户输入。表单和数据库更新的验证是从main.aspx页面上的提交按钮触发的,该页面包含带有控件的面板。这绝对没问题。

所以我通过复制代码/逻辑并修改它来将这个想法复制到另一个页面(作为包含不同控件的不同ascx),因为这是我知道如何添加可变数量的控件的唯一方法(每个控件都有标题,显示一些信息,并有一个用于用户输入的CheckBox。)

新的UserControls被添加到页面中,当我尝试使用下面的代码引用它们时出现问题。此代码从“提交”按钮触发。它失败是因为面板对象不包含任何控件,尽管我测试时它们在网页上显示

protected void GetInformationSelected()
    {
        int numRecs = 0;
        foreach (Control c in pnlInfo.Controls) // this is the problem as no controls are detected inside the panel
        {
            try
            {
                string x = c.GetType().ToString();
                if (x == "ASP.ctlInfo_ascx")
                {
                    if (((ctlInfo)c) != null)
                    { 
                        numRecs = numRecs + ((ctlInfo)c).getSelected();  // this will read the value from the control
                    }
                }
            }
            catch (System.Exception err)
            {
                Response.Write(err.Message);
            }
        }
    }

我确信需要更多信息来描述问题,我很乐意发布其他所需的信息。

以下是我如何将控件添加到Panel中。有趣的是,使用this.FindControl("pnlInfo").Controls.Add(c1);不能像在其他页面中那样工作,而是我只使用了pnlInfo.Controls.Add(c1);

foreach (DataRow dr in dt.Rows)
        {
            ctlInfo c1 = (ctlInfo)this.LoadControl("~\\ctlInfo.ascx");
            c1.Init(Int32.Parse(dr[0].ToString()), dr[1].ToString(), dr[2].ToString(), dr[3].ToString());  // *** need to check the columns in the data set
            pnlInfo.Controls.Add(c1);
            //this.FindControl("pnlInfo").Controls.Add(c1);  This is how the previous example added the controls, note the subtle difference
        }

非常感谢任何指导,所以提前感谢。下面我将显示网页中显示的内容,其中包含屏幕右侧5个用户控件的违规面板。请注意,始终显示产品信息(即添加第一个UserControl),但根据实验的随机组件,可能会显示0到4个额外的信息位:

Screenshot of the main page with 5 x User Controls added to the right hand side

0 个答案:

没有答案