2

devexラジオリストコントロールで満たされたHTMLテーブルを動的に作成し、それをページに追加しています。

//Create the radio list
ASPxRadioButtonList radButt = new ASPxRadioButtonList();
radButt.ID = "audit-" + audType;

tableCell2.Controls.Add(radButt);
tableRow.Cells.Add(tableCell2);
auditTable.Rows.Add(tableRow);

これはすべて正常に機能します。
さて、コールバックの中で、そのラジオリストを取得してその設定を取得したいので...これを試していますが、NULLを取得し続けます。

ASPxRadioButtonList audRad = (ASPxRadioButtonList)Page.FindControl("audit-" + audType);

私がここで欠けているものは何ですか?

4

2 に答える 2

2

問題は、Page.FindControlメソッドがページ上のすべてのコントロールを検索しないことです。コントロールの最上位レイヤーのみを検索します。Page.FindControlControl.FindControlを使用して、おそらく再帰的に、ページ上のすべてのコントロールを検索する必要があります。

もう1つのポイントは、ポストバックでラジオボタンを見つけることですか、それとも同じリクエストで見つけることですか?ポストバックを意味する場合は、アニケットが述べたように、ポストバックでもコントロールを再生成する必要があります。

于 2013-01-17T17:31:55.710 に答える
2

Maartenの回答によると、マスターのブログから直接選択した再帰的なFindControlソリューションは次のとおりです。

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 
于 2013-01-17T18:03:48.130 に答える