2010-12-20 148 views
1

我一直在努力尋找清楚的答案來動態地創建同一頁面。我發現的問題和樣本似乎在這個話題上都是全面的。我研究了生命週期,並且對於代碼的去向,似乎還沒有明確的答案。用c#頁面動態創建asp.net

我有一個母版頁和一個內容頁。內容區域中的所有內容都需要動態創建(文本框,ddl,頁面標籤,按鈕/ onclick等)。

當用戶填寫數據並點擊提交按鈕後,我需要從窗體中讀取值並重新完成頁面的重新構建(不向當前內容添加/刪除控件)。

我的問題是。 我在哪裏放置我的代碼來構建頁面? 此區域是否允許我使用IsPostBack,以便使用Request.Form值重建內容? 我的按鈕_Click事件是否有效? 有沒有可以指導我工作的樣品?

非常感謝您的反饋...

回答

1

我不知道所有問題的答案,但我希望這可以讓你開始。當通過代碼動態生成用戶界面時,這發生在Init中。在Init上動態加載的控件是關鍵的,因爲在init和load之間,在回發時,viewstate會爲這些控件加載。

這意味着您需要在每次回發時重新創建頁面以匹配先前的控制樹,然後在初始化後重新構建它並重新創建新的用戶界面,如果某些事情應該更改UI。這是因爲它驗證了樹結構來確定它的同一個UI。現在,如果你不需要視圖狀態,這可能不是一個問題。如果沒有查看狀態,我還沒有驗證過它是否有不同的表現。

它取決於您需要它的動態程度,無論您是否需要viewstate(是一個很大的因素)。

HTH。

1

嘗試在頁面的PreInit方法創建的控件。 「IsPostBack」應該工作,點擊事件處理程序也應該工作。

+0

PreInit是去這裏的路。控件將在OnInit事件中恢復並且屬性將被分配給控件,但前提是名稱相同 – citronas 2010-12-20 19:18:38

0

Brian的建議很好,你應該關注他們。

這可能不是真的回答你的問題,但我仍然把它作爲建議添加。我專業地創建了大量的ASP.net Web應用程序,根據我的經驗,我可以說太多的「動態」通常是不好的,應該避免,因爲它只是引入了複雜性。通常情況下,您可能想要將UI部分公開到ASP.net UserControls中,或者如果您想讓它們更加可重用(如果這是一個因素),那麼將其轉換爲ASP.net服務器控件。然後你動態地替換它們,而不是從頭開始創建所有東西。