2010-03-18 29 views
3

我有一個數據訪問層,業務邏輯層和表示層(即頁面本身)。ASP.NET處理按鈕單擊事件之前OnPreInit

我處理OnPreInit事件並填充頁面所需的集合。所有數據來自SQL服務器數據庫,我不使用緩存。

我處理按鈕單擊事件以從表單中獲取值並將新對象插入到數據庫中。問題是,當我處理click事件時,集合已經被填充,所以已經被插入到數據庫中的新項目未被檢索。

接受的解決方案是什麼?

我可以直接將新對象插入到集合中並重新綁定GridView,但SQL查詢只選擇一組對象,並且新對象可能會落在該集合之外。

謝謝!

回答

2

我一般做數據綁定在兩個地方我pages:

  1. Inside Page_Load,if!IsPostBack加載初始狀態。

  2. 作爲事件處理程序中顯示添加/編輯/刪除記錄結果的最後一行。

你正在運行到的問題是使用OnPreInit做數據綁定而造成的,所以你可能會不得不停止這樣做,或嘗試別人次最佳方法之一已經建議(在回傳後重定向回頁面)。

+0

科裏的解釋是最完整的。這裏的關鍵是你不想在PostBack上重新綁定你的數據,除非由於用戶操作(即添加一個新項目)而明確需要它。查看任何Microsoft的Databinding示例,例如GridView。 – Bryan 2010-03-18 23:07:03

+0

這很棒,連同來自pmarflee的提示我已經解決了這個問題。謝謝! – Phillykins 2010-03-19 11:39:34

1

稍後在頁面生命週期中執行數據綁定操作,例如,在處理完任何控制事件後觸發的頁面PreRender事件。

0

你應該只處理點擊事件。然後,在數據庫更新/插入後,您必須重新綁定數據。根據您的實施情況,您可能需要重新發布頁面。如果你使用普通的數據綁定,你可以再次調用bind方法。

+0

我想避免另一輪的訪問數據庫,如果可能的web服務器,它似乎在這種情況下沒有必要。 – Phillykins 2010-03-18 20:33:07

+0

如果業務邏輯位於數據庫中,則必須要求數據庫執行什麼操作。你可以從插入語句中返回一些值,告訴你該做什麼,但這看起來很詭異。 – Greg 2010-03-18 20:37:53

0
  1. 檢索Page.LoadComplete事件上的數據並進行數據綁定。
  2. 如果出於某種原因,只應在PreInit進行檢索,然後檢索他們對!的IsPostBack條件和束縛他們的回發的條件下,處理他們在LoadComplete