-1

マスター ページとそのコンテンツ ページがあります。コンテンツページにあるテキストボックスを取得したい。コンテンツ ページの C# コード ビハインドでそれらを取得するにはどうすればよいですか?

4

1 に答える 1

0

ID を使用してアクセスします。

マークアップ:

<asp:TextBox runat="server" ID="myTextBox"></asp:TextBox>

コードビハインド:

myTextBox.Text = "This is a text!";

runat="server"アクセスできるようにするには、追加する必要があることに注意してください。

編集
あなたのコメントの後、私はあなたがどこに向かっているのか理解していると思います。すべての TextBox を見つけるには、コントロール ツリーのすべてのコントロールをたどる必要があります。

以下は再帰的な実装です。

public List<Control> FindControls(Control root, Type type)
{
    var controls = new List<Control>();

    foreach (Control ctrl in root.Controls)
    {
        if (ctrl.GetType() == type)
            controls.Add(ctrl);

        if (ctrl.Controls.Count > 0)
            controls.AddRange(FindControls(ctrl, type));
    }

    return controls;
}

ページ内のすべての TextBoxes を取得するには、 Page をルート コントロールとして呼び出します。

var allTextBoxes = FindControls(Page, typeof(TextBox));

上記の例は、どのように進めるべきかを明確にするためのものです。拡張メソッドを使用して、少し異なる方法で行います。

public static class ExtensionMethods
{
    public static IEnumerable<Control> FindControls(this Control root)
    {
        foreach (Control ctrl in root.Controls)
        {
            yield return ctrl;
            foreach (Control desc in ctrl.FindControls())
                yield return desc;
        }

    }
}

IEnumerable であるため、任意のコントロールで直接使用でき、結果に Linq を適用することもできます。

これにより、ページ内のすべてのコントロールの配列が取得されます。

var allControls = this.FindControls().ToArray();

すべての TextBox コントロールの配列を取得するには:

var allTextBoxes = this.FindControls()
                       .OfType<TextBox>().ToLArray<TextBox>();

特定の ID を持つ TextBoxes のリストを取得するには:

var myTextBox = this.FindControls()
                    .OfType<TextBox>()
                    .Where<TextBox>(tb => tb.ID.Equals("textBox1")).ToList<TextBox>();

foreach ステートメントでも使用できます。

foreach (Control c in this.FindControls())
{
  ...
}
于 2009-12-21T15:13:07.583 に答える