より簡単な方法は、設計時にすべてのコントロールを作成し、要件に基づいてコントロールを非表示にすることです。
コード例:
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 を指定することは常に良い考えです。
追加されたコントロールをメンバー変数に保存し、別の場所で使用できます (それらが割り当てられた後) 
。それらのイベントをサブスクライブできます。ユーザーが新しい値を投稿した場合、メソッドが呼び出されます。