从ControlCollection中获取UserControl

时间:2012-01-19 20:31:40

标签: asp.net user-controls

所以我目前正在向Panel Collection添加一组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方法并在每个控件中保存方法。这是我正在使用的代码,但它不起作用。

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

我在转换时收到错误消息,它说

“无法将'System.Web.UI.LiteralControl'类型的对象强制转换为'UserControls.IssuePollsUC'”

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

1 个答案:

答案 0 :(得分:0)

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

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中并且不会出现在任何控件集合中。