より簡単な方法は、設計時にすべてのコントロールを作成し、要件に基づいてコントロールを非表示にすることです。
コード例:
protected void Page_Load(object sender, EventArgs e)
{
txtBox.Visible = QuestionTypeID == 1;
chkBox.Visible = QuestionTypeID == 2;
}
David が指摘したように動的コントロールを使用する場合は、値 QuestionTypeID を ViewState または ControlState に保存し、その値に基づいて必要なコントロールを作成します。
(コントロールは、ポストバックでもページが読み込まれるたびに作成する必要があり、ViewState を永続化して復元する場合は、ページのライフ サイクルの後半で Page_Load メソッドを作成することはできません)
コード例:
protected void Page_Load(object sender, EventArgs e)
{
var questionId = ViewState["QuestionTypeID"];
if(questionId == /* Value to create TextBox */) {
var txt = new TextBox { ID = "txt" };
placeHolder.Controls.Add(txt);
} else if(questionId == /* Value to create Calender */) {
var cal = new Calender { ID = "cal" };
placeHolder.Controls.Add(cal);
}
/* Once the controls are added they will be populated with the posted values */
}
PS
動的コントロールで ID を指定することは常に良い考えです。
追加されたコントロールをメンバー変数に保存し、別の場所で使用できます (それらが割り当てられた後)
。それらのイベントをサブスクライブできます。ユーザーが新しい値を投稿した場合、メソッドが呼び出されます。