从ControlCollection内部获取UserControl



因此,我当前正在向面板集合添加一组用户控件。

这是代码

foreach (IssuePoll poll in issuePollList)
{
     IssuePollsUC issuePoll = (IssuePollsUC)Page.LoadControl("~/UserControls/IssuePollsUC.ascx");
     issuePoll.LoadPoll(poll, false, politician.PoliticianID);
     pnlUnFinishedTest.Controls.Add(issuePoll);
}

我正在尝试获取这些用户控件,以便在每个控件中调用validate方法和save方法。这是我正在使用的代码,但它不起作用。

foreach (Control control in pnlUnFinishedTest.Controls)
{
     IssuePollsUC issuePolls = (IssuePollsUC)control;
     issuePolls.SavePollAnswer(appUser.User.PersonID);
}

我在转换器上收到一条错误消息,上面写着

"无法将类型为"System.Web.UI.LeralControl"的对象强制转换为类型为"UserControls.IssuePollsUC"

编辑:看起来问题在于控件无法转换为(用户控件)

面板中除了用户控件之外还有其他控件,即导致强制转换失败的文字。尝试

foreach (Control control in pnlUnFinishedTest.Controls) 
{    
     IssuePollsUC issuePolls = control as IssuePollsUC;      
     if(issuePolls != null)
     {
          issuePolls.SavePollAnswer(appUser.User.PersonID); 
     } 
}

这将使其更加安全。

编辑

请注意,必须在Page_Init事件中添加动态控件,而不是在Page_Load或其他任何位置添加。我怀疑您的控件甚至不在那里——将它们添加到Page_Init中意味着它们不在ViewState中,也不会出现在任何控件集合中。

最新更新