6

リピーターアイテムコントロールのクライアントIDを解決し、それを他のコマンドで使用したいのですが、彼のクライアントIDでコントロールを取得するにはどうすればよいですか?

TextBox TB = FindControl ...?

4

6 に答える 6

7

リピーター内にあるテキストボックスを見つけようとしていますか? その場合は、コントロールの ID に基づいて検索する以下のメソッドを使用できます。代わりに、コントロールの clientID に基づいてチェックするように変更できます。

  public static System.Web.UI.Control FindControlIterative(System.Web.UI.Control root, string id)
    {
        System.Web.UI.Control ctl = root;
        var ctls = new LinkedList<System.Web.UI.Control>();

        while (ctl != null)
        {
            if (ctl.ID == id)
                return ctl;
            foreach (System.Web.UI.Control child in ctl.Controls)
            {
                if (child.ID == id)
                    return child;
                if (child.HasControls())
                    ctls.AddLast(child);
            }
            if (ctls.First != null)
            {
                ctl = ctls.First.Value;
                ctls.Remove(ctl);
            }
            else return null;
        }
        return null;
    }
于 2010-10-14T14:23:00.830 に答える
0

コントロール ツリー全体ですべてのコントロールをループする代わりに、それを分割して、グループから一度に 1 つのコントロールに移動できます。

public Control GetControlByClientId(string clientId)
{
    Queue<string> clientIds = new Queue<string>(clientId.Split(ClientIDSeparator));
    Control root = this.Page;
    string subControlId = null;
    while (clientIds.Count > 0)
    {
        if (subControlId == null)
        {
            subControlId = clientIds.Dequeue();
        }
        else
        {
            subControlId += ClientIDSeparator + clientIds.Dequeue();
        }
        Control subControl = root.FindControl(subControlId);
        if (subControl != null)
        {
            root = subControl;
            subControlId = null;
        }
    }
    if (root.ClientID == clientId)
    {
        return root;
    }
    else
    {
        throw new ArgumentOutOfRangeException();
    }
}

注: この関数は、クラスで定義された保護されたプロパティであるClientIDSeparatorControlを使用するため、このメソッドは Control を継承するもので使用する必要があります。

于 2015-03-12T15:15:42.547 に答える
0
<%= Control.ClientID %>
于 2010-10-14T14:22:20.257 に答える
0

特定の RepeaterItem にアクセスできますか (ItemDataBound イベント ハンドラーのように)?

もしそうならrepeaterItem.FindControl("YourControlId")、子コントロールを取得することができます。

于 2010-10-14T14:26:17.937 に答える