2012-01-19 7 views
1

私は現在、UserControlsのコレクションをPanel Collectionに追加しています。ここでControlCollection内からUserControlを取得

は私がvalidateメソッドを呼び出すと、これらのコントロールの各内部メソッドを保存することができますので、それらのユーザーコントロールを取得しようとしていますそのコード

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

です。ここで私はそれを使用しているコードですが、動作していません。

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

私は変換にエラーメッセージを取得し、それが

「型のオブジェクトをキャストすることができません 『System.Web.UI.LiteralControl』 『UserControls.IssuePollsUC』と入力する」と言う

EDIT:コントロールが(ユーザーコントロール)に変換できないという事実にあります。

+0

特に動作しないものはありますか?それはコントロールを見つけることはありません? –

+0

変換時にエラーメッセージが表示されます。「 'System.Web.UI.LiteralControl'タイプのオブジェクトを 'UserControls.IssuePollsUC'にキャストできません」 –

答えて

0

ユーザーコントロール以外のコントロールがパネルにあります。つまり、キャストの原因となっているリテラルl。試してください

foreach (Control control in pnlUnFinishedTest.Controls) 
{  
    IssuePollsUC issuePolls = control as IssuePollsUC;  

    if(issuePolls != null) 
    { 
      issuePolls.SavePollAnswer(appUser.User.PersonID); 
    } 
} 

これはより多くの種類の安全になります。

EDIT

は、あなたがどこにもないPage_LoadまたはPage_Initイベントでダイナミックなコントロールを追加しなければならないことに注意してください。私はあなたのコントロールがそこにさえ存在しないと思う - Page_Initにないそれらを加えることは、彼らがViewStateになく、どんなコントロールコレクションにも存在しないことを意味する。

+0

上記の方法を試してみました。同じ結果。 Page_Initを使用すると、コントロールは実際に読み込まれ、page_loadにロードされたページに表示されます。したがって、コントロールはそこにあり、パネルにはコントロールコレクション内に1つのオブジェクトがあります(それは、そこに唯一のオブジェクトでなければなりません)。 –

+0

@AndyXufuris。私は少し不明です。あなたはまだ例外を取得していますか?もしそうなら、どんなコード行に。 asキーワードshoul dpreventは例外をスローしません。このようにして質問します。http://stackoverflow.com/questions/227121/casting-a-usercontrol-as-a-specific-type-of-user-controlあなたがfreachすなわちforeach(UserControl plhMediaBuys.Controlsのuc)。それは役に立ちますか? –

関連する問題