0

私は asp.net webapplication を持っています。マスター ページの下に aspx ページがあります。 (1) UC1 (2) UC2 の 2 つの UserControl があります。UC1 はマスター ページ デザインに追加され、UC2 は aspx ページ デザインに追加されます。

今、私は AutoPostback プロパティを True に設定した UC1 のチェックボックスをいくつか持っています。Checked_Change イベントで、セッションに値を追加しました。そして、UC2 userControl 内にある関数を呼び出したい

しかし、問題は、チェックボックスをチェックすると、UC2 のコードが最初に実行され、次に UC1 のコードが実行されるときです。したがって、UC2 のコードでは、UC1 のコードに追加されたセッション値が見つかりません。

では、UserControls のコード実行の順序を変更する方法 ???

UC1 を介して MasterPage の子ページを見つける方法はありますか ???

ありがとう

4

1 に答える 1

0

はい、それはコントロール間の通信の良い方法ではありません。セッションを使用することも良い方法ではありません。ただし、できることは次のようなものです。

マスター ページで、 を使用してContentPlaceHolderを探しUC2ます。FindControlメソッドを使用するには、その ID が必要です。

Control ctrl = ContentPlaceHolder.FindControl("UC2_ID");

if (ctrl != null && ctrl is UC2)
{
    UC2 uc2 = (UC2)ctrl;

    uc2.TakeThisStuff(stuff);
}

または、その ID がよくわからない場合は、ContentPlaceHolderタイプが UC2 であるコントロールが見つかるまで、コントロールを反復処理できます。

public T FindControl<T>(Control parent) where T : Control
{
    foreach (Control c in parent.Controls)
    {
        if (c is T)
        {
            return (T)c;
        }
        else if (c.Controls.Count > 0)
        {
            Control child = FindControl<T>(c);
            if (child != null)
                return (T)child;
        }
    }

    return null;
}

次のように使用します。

UC2 ctrl = FindControl<UC2>(ContentPlaceHolder);

if (ctrl != null)
{
    UC2 uc2 = (UC2)ctrl;

    uc2.TakeThisStuff(stuff);
}
于 2013-02-22T10:35:44.353 に答える