0

私はこの問題に固執していて、それを回避する方法を見つけることができないようです。CheckBoxListコントロールがあります。わからない場合は、CheckBoxListコントロールのFindControl()メソッドが「this」を返します。Microsoftは、内部的に多くのListItemオブジェクトを作成せず、1つだけを作成するためにこれを行いました。とにかく、投稿されたバックコントロールが私のCheckBoxListのコントロールの1つであるかどうかを調べようとしています。私のコードは次のように見えます:

if (!(System.Web.UI.ScriptManager.GetCurrent(Page) == null)) {
string postbackControlId =            System.Web.UI.ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID;
    if (!string.IsNullOrEmpty(postbackControlId))
    {
       Control control = ControlFinder.RecursiveFindChildControl(Controls, postbackControlId);
       if (!(control == null))
        { }
    }
}

CheckBoxListの子コントロールを列挙したり、私が持っているIDがそれらのIDと等しいかどうかを確認したりする方法はありますか?

ありがとう、マイク

4

2 に答える 2

0

ポストバックがの項目の1つによって引き起こされたかどうかを確認するだけの場合はCheckBoxList、コントロール階層全体をトラバースする必要はありません。リストにドリルダウンする必要はありません。このようなものはうまくいくはずです:

string elementID = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID;
if (elementID.Contains(chkList.UniqueID))
{
    //one of the checkboxes caused the postback
}
于 2012-04-05T18:52:38.037 に答える
0

UniqueIDaCheckBox内のaはCheckBoxList、アイテムのプラスプラスインデックスであるため、次のようなコントロールの1つであるかどうかをUniqueID確認CheckBoxListできます。$postbackControlIdCheckBox

if (postbackControlId.StartsWith(this.checkBoxList.UniqueID + "$"))
{
    int itemIndex = Convert.ToInt32(
        postbackControlId.Substring(this.checkBoxList.UniqueID.Length + 1), 10);
    // ...
}
于 2012-04-05T18:52:52.747 に答える