複数の (およびネストされた) コントロールを PlaceHolder に追加する必要があるアプリケーションがあります。ユーザーが「週」の数を入力すると、私のアプリケーションは (Telerik コントロール セットを使用して) RadSplitter を、その週に関連するペイン/グリッドと共に追加します。コード ビハインドを使用してこれらのコントロールを追加します。
これは、最初のバインド時 (週数を入力して [送信] をクリックするとき) に問題なく機能します。しかし、ポストバックの原因となるコントロール間のドラッグ アンド ドロップ機能も有効にする必要があります。
私のプレースホルダーのコントロールの数はポストバックで常に「0」であるように見えるので、それらは ViewState に保存されていないと推測しています。ポストバックごとにこれらを読み上げるのではなく、自分のコントロールが ViewState に確実に格納されるようにするにはどうすればよいですか?
コード例を次に示します。
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (plcSplitter.Controls.Count > 0)
plcSplitter.Controls.Remove(plcSplitter.Controls[0]);
var splitter = new Telerik.Web.UI.RadSplitter();
splitter.Width = Unit.Percentage(100);
int noOfWeeks = int.Parse(txtNoOfWeeks.Text);
DateTime dt = new DateTime(2012, 05, 13);
for (int i = 0; i < noOfWeeks; i++)
{
var range = new Common.DateRange(dt.AddDays(-6),dt);
var pane = new Telerik.Web.UI.RadPane();
Label lbl = new Label();
lbl.ID = "lblText";
lbl.Text = range.To.ToShortDateString();
pane.Controls.Add(lbl);
var gv = AddGrid(i);
pane.Controls.Add(gv);
splitter.Items.Add(pane);
var splitLine = new Telerik.Web.UI.RadSplitBar();
splitter.Items.Add(splitLine);
dt = dt.AddDays(-7);
}
plcSplitter.Controls.Add(splitter);
splitter.DataBind();
}