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