- - PR -
C#でコントロールのID名からコントロールを取得する方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-28 19:33
こんにちは。
ASP.NETのC#でTextBoxから値を取得しようとしています。 TextBoxのIDが動的に変わるのですが、値を取得する方法はありますか? <asp:TextBox ID="aaa" runat="server"></asp:TextBox> <asp:TextBox ID="bbb" runat="server"></asp:TextBox> <asp:TextBox ID="ccc" runat="server"></asp:TextBox> <asp:TextBox ID="ddd" runat="server"></asp:TextBox> <asp:TextBox ID="eee" runat="server"></asp:TextBox> のようになってまして、C#のソースの方では、 string textBoxID = "aaa"; <-これがaaaやbbb,ccc等に変わる [textBoxID].Text; のように、Textプロパティを取得しようとしています。 | ||||||||
|
投稿日時: 2006-11-28 19:53
FindControl で検索してみましょう。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-11-28 20:09
ありがとうございます。
実はFindControlは試してみたのですが、うまく行きませんでした。 以下のように実装しましたが、NullReferenceExceptionが発生します。 検索しても解決できず質問させていただきました。 具体的にどこが間違ってますでしょうか? string textBoxName = ((TextBox)Page.FindControl("aaa")).Text; | ||||||||
|
投稿日時: 2006-11-28 20:26
自己レスです。
無理やりですが、 <asp:Panel ID="ppp" runat="server"> <asp:TextBox ID="aaa" runat="server"></asp:TextBox> <asp:TextBox ID="bbb" runat="server"></asp:TextBox> <asp:TextBox ID="ccc" runat="server"></asp:TextBox> <asp:TextBox ID="ddd" runat="server"></asp:TextBox> <asp:TextBox ID="eee" runat="server"></asp:TextBox> </asp:Panel> のようにして、 string textBoxText = ((TextBox)(ppp.FindControl("aaa"))).Text; として回避しました。 | ||||||||
|
投稿日時: 2006-11-28 20:41
の根本的な原因は、検証がないからでしょう。 FindControl メソッドによって、コントロールが見つからない場合は null を返しますから、
のようにすべきでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-11-28 20:54
コードが少ないのでよくわかりませんが、Page に対してやってるからでしょう。 「何のインスタンス」に FindControl するのか考えなければなりません。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-11-28 21:00
ありがとうございます。
以下のように修整しました。 string textBoxText = ""; TextBox oTextBox = ppp.FindControl("aaa") as TextBox; if (oTextBox != null){ textBoxText = oTextBox.Text; } | ||||||||
|
投稿日時: 2006-11-28 23:47
細かいですけど、「aaa」テキストボックスがある事を確実に期待しているならば、
の方がいいかな、と思います。 そうしないと「aaaテキストボックス」がない事にすぐ気付きませんからね。 _________________ 囚人のジレンマな日々 |