0

FindControl メソッドを使用して ASP Web アプリで asp:checkbox を見つけることができません。次を使用して、フォームにチェックボックスを配置しました。

<asp:CheckBox ID="test" Text="Test checkbox" runat="server" />

私の分離コードには次のものがあります。

Control checkbox = FindControl("test");
if (checkbox != null) Debug.Print("checkbox found");
else Debug.Print("checkbox not found");

if (test.Checked) Debug.Print("checkbox is checked");
else Debug.Print("checkbox is unchecked");

ただし、私の出力(チェックボックスがチェックされている)は次のとおりです。チェックボックスが見つかりませんチェックボックスがチェックされています

誰かが私が間違っていることを教えてもらえますか?

4

2 に答える 2

4

このFindControlメソッドは再帰的ではなく、チェックボックスの直接の親で呼び出す場合にのみコントロールを検索します。したがって、たとえば、チェックボックスがUpdatePanelページ内にもあるの中に配置されている場合、FindControlあなたがしているようにではUpdatePanelなく、を呼び出す必要がありPage.FindControlます。

出力に次のように表示される理由は、直接checkbox not found checkbox is checked呼び出しているためです。これは、チェックボックスに指定したIDであるため、常に機能します。test.checked

繰り返しますが、FindControl再帰的ではなく、私はそれが失敗している理由であると確信しています。独自の「RecursiveFindControl」メソッドを作成することもできますが、それはほとんどの場合、やり過ぎであり、地獄のように非効率的です。

于 2012-07-19T17:08:56.447 に答える
0

再帰的な方法を使用して、次の方法でコントロールを見つけることができます。

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

上記の再帰的な方法を使用して、コントロールを見つけます。

CheckBox checkbox =  RecursiveFindControl(Page, "test") as CheckBox;
if (checkbox != null) Debug.Print("checkbox found");
else Debug.Print("checkbox not found");

if (test.Checked) Debug.Print("checkbox is checked");
else Debug.Print("checkbox is unchecked");
于 2012-07-19T17:09:51.293 に答える