2012-01-30 6 views
1

私はポストバック時に動的に作成されたテーブルを持っています。各行に対して標準的なHTMLチェックボックスを持つ文書のリスト。目的は1クリックで&複数の文書をダウンロードを選択できるようにすることです。ポストバック後のコントロール

私が抱えている問題は、onLoadまたはonInitが作成されていないため、viewstateにはありません。

これで、クライアントはドキュメントカテゴリを選択します。&クリックするとドキュメントを取得します。それはデータベースにヒットし、チェックボックスを含むHTML行を作成します。 HTMLはタグ間のリテラルに読み込まれます。

更新

[OK]をので、私は使っていないことだし、背後にあるコードを経由して行とセルを作成しました。私は今トレースを介してコントロールツリーのチェックボックスを見ることができます。

ctl00 $ ContentPlaceHolder1 $ 639eec32-f1a8-4fbb-A442-d429571fc3a5 System.Web.UI.WebControls.CheckBox

これは私がチェックボックスを見つけることを試みてきたものである:

public static Control FindControlRecursive(Control Root, string Id) { 
    if (Root.ID == Id) return Root; 
    foreach (Control Ctl in Root.Controls) { 
     Control FoundCtl = FindControlRecursive(Ctl, Id); 
     if (FoundCtl != null) return FoundCtl; 
    } 
    return null; 
} 

FindControlRecursive関数が実行されているとき。ページ上に5つのコントロールしか表示されません。私はチェックされたチェックボックスを見つけるのに十分なやり方をしたのですか、それともまだ正しい方向に進んでいませんか?

ありがとうございます!

+0

また、 'トレース'機能も使用しています。 – bExplosion

+1

runat = 'server'をチェックボックスに追加できますか? – Tim

+1

チェックボックスをどのように(そしてどこで)作成したか表示してください。 –

答えて

1

コントロールを検索することは問題ではありません。 OnInitフェーズでは、リクエストごとに適切に追加するだけで済みます。

リテラルコントロールを使用してASP.NETサーバーコントロールを追加しないでください。代わりにPlaceHolderのような特殊なコンテナを使用してください。

次に、あなたがコントロールのIDを知っていれば、あなたは、単ににFindControl()を使用することができます。

Control myControl1 = FindControl("TextBox2"); 
+0

見て私はコントロールの名前を知っている。どのように私はそれらをOninitに追加しますか? – bExplosion

+0

http://msdn.microsoft.com/en-us/library/cd6at422.aspxこれをチェックする –

+0

次の要求を処理するために、ページの以前の状態を復元する必要があります。以前のリクエストでファイルのカテゴリが選択されているため、たとえば、セッションでその値を保存し、ポストバック中にOnInitのすべてを再作成することができます。 –

1

は、あなたが述べたように、彼らが作成されていることを確認します。 IE Developerツール(F12)またはページソースを使用してIDを確認することができます。次に、FindControl()を使用できるようになります。 CheckBoxコントロールにキャストする必要があるので、チェックされているかチェックされていないかをチェックすることができます。

関連する問題