我正在處理一個ASP.NET項目,其中絕大多數表單是在運行時動態生成的(表單定義存儲在數據庫中以進行自定義)。因此,無論IsPostBack如何,每次OnLoad觸發時,我都必須動態創建控件並將其添加到頁面中。這一直工作得很好,.NET負責爲這些控件管理ViewState。動態創建控件和ASP.NET頁生命週期
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
RenderDynamicControls()
}
private void RenderDynamicControls()
{
//1. call service layer to retrieve form definition
//2. create and add controls to page container
}
我如果用戶點擊一個給定的按鈕(這個按鈕在設計時創建)的頁面應該重新呈現在一個稍微不同的方式,其中的新要求。因此,除了在的OnLoad執行的代碼(即RenderDynamicControls()),我有這樣的代碼:
protected void MyButton_Click(object sender, EventArgs e)
{
RenderDynamicControlsALittleDifferently()
}
private void RenderDynamicControlsALittleDifferently()
{
//1. clear all controls from the page container added in RenderDynamicControls()
//2. call service layer to retrieve form definition
//3. create and add controls to page container
}
我的問題是,這是真的來完成我後的唯一途徑?爲了響應點擊按鈕,有效地渲染表單兩次似乎超越了哈希。我從我的研究中收集到,這就是頁面生命週期在ASP.NET中的工作原理:即,在調用子事件之前,OnLoad必須在每個Postback上觸發。儘管如此,在喝酒之前還需要與SO社區進行覈實。
在相關說明中,一旦完成此功能,我計劃在頁面上拋出一個UpdatePanel以通過Ajax執行頁面更新。任何使代碼轉換變得更簡單的代碼/建議將會受到重視。
歡迎使用ASP.NET。準備將所有邏輯扔出窗外 – 2010-05-11 02:25:44