- PR -

PlaceHolder内のascxにアクセスしたい

1
投稿者投稿内容
L-92
会議室デビュー日: 2007/02/19
投稿数: 3
投稿日時: 2007-03-07 14:04
お世話になります。
PlaceHolder内のコントロールへのアクセスについて質問させて下さい。

VS2003で開発を行っています。
A.ascx上にPlaceHolderを配置し、そこにLoadControlでB.ascxを読み込んでいます。
B.ascxには諸事情があってディレクティブを記述していません。

A.ascx上にはボタンを配置し、Clickイベント時にPlaceHolder内の
B.ascxのコントロールの値を読み込もうとしているのですが、ポストバック時に
B.ascxがページから消えてしまうようで、読み込めません。
B.ascxのコントロールの値を読み込むにはどうしたらよいのでしょうか?

以下、ソースです。
------------------
[A.ascx.cs]
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;

private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
PlaceHolder1.Controls.Add(LoadControl("B.ascx"));
}

private void Button1_Click(object sender, System.EventArgs e)
{
String strBuff;
foreach(Control ctrl in PlaceHolder1.Controls){
if(ctrl is TextBox)
strBuff += ctrl.ID + ": " + ((TextBox)ctrl).Text + " "; // *** strBuffに何も書き込まれない ***
}
}

[B.ascx]
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
------------------

どなたか原因等ご存じであれば教えてください。
どうぞよろしくお願いいたします。
momotchi
常連さん
会議室デビュー日: 2004/01/16
投稿数: 28
お住まい・勤務地: 宮城県
投稿日時: 2007-03-07 18:35
上記のコードでTextBoxの値をとる場合、

if(!IsPostBack) をはずし、
foreach(Control ctrl in PlaceHolder1.Controls){ を
foreach(Control ctrl in PlaceHolder1.Controls[0].Controls){
に変更することで値が取れると思います。
1

スキルアップ/キャリアアップ(JOB@IT)