QA@IT
この質問・回答は、@IT会議室からインポートされたものです。

動的に配置したコントロールの値を取得

[開発環境] VS2008 C# ASP.NET 2.0

1、ボタンクリックのイベントで動的にテキストボックスコントロールを作成
protected void Button1_Click(object sender, EventArgs e)
{
TextBox TextBox = new TextBox();
TextBox.ID = "TB";
TextBox.Text = "TEST";
form1.Controls.Add(TextBox);
}

2、別のボタンクリックのイベントで先のイベントで配置したテキストボックスコントロールから値を取得
protected void Button2_Click(object sender, EventArgs e)
{
TextBox TextBox = new TextBox();
TextBox = (TextBox)form1.FindControl("TB");
string str = TextBox.Text;
}
としているのですが、"string str = TextBox.Text;"の部分で「オブジェクト参照がオブジェクト インスタンスに設定されていません。」とエラーになり、解決できません・・・
お手数ですが、ご存知の方、アドバイスなどよろしくお願いします。

投稿者: 未記入

回答

要件的に可能であれば、TextBox を静的に配置して Visible プロパティで見せる/見せないを切り替えたほうがいろいろと楽だと思います。

投稿者: rain

編集 履歴 (0)

VS2008は3.5も2.0も選択できますね。
1.1とかは選べませんが……。

投稿者: Wingard

編集 履歴 (0)

早速の回答ありがとうございます。
>Request.Form["TB"]で取得できます。
この方法でうまく取得することができました。

今回は、テキストボックスを表示することないので問題はないのですが、ボタン2を押した後にもテキストボックスを表示させたい場合は、どうすればいいのでしょうか?

投稿者: 未記入

編集 履歴 (0)

Button1でもButton2でもポストバック時にはTextBoxが存在していないからです。
Button2のClick時に入力値を取りたいだけであればRequest.Form["TB"]で取得できます。
でもTextBoxは表示されません。

あと関係ないですがクラス名と同じフィールド名は使わない方が良いと思います。
TextBox TextBox = new TextBox();の行は無駄だと思います。
VS2008はASP.NET3.5じゃあありませんでしたっけ?(2.0もできたらすみません)

投稿者: King

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。