2011-06-10 108 views
6

我已經有了一個asp.net頁面,它具有c#代碼隱藏功能,可以在Page_Load()方法中執行一些操作(如查詢數據庫並進行一些其他調用以使用數據填充對象) 。然後我在頁面上顯示這些數據。這一切工作正常。我設置了幾個回發,以便當單擊列表框中的值時,面板控件將填充相應對象的其餘數據。我認爲回傳是正確的做法,但這會導致(整個類)被重新調用,重新初始化我的對象並破壞我想保留的數據。在回傳中保留c#對象

某種形式的部分回傳會解決這個問題,還是有更好的方法來實現我想要做的事情?

我不想每次回傳被調用時重新填充的對象,因爲這需要一個數據庫查詢,我想避免重新查詢每被點擊一次的東西...

我已經發現了很多關於持久化Javascript對象的問題,但沒有任何真正解決這個問題的東西。我正在使用.Net 4.0

+0

你有很多選擇來保存你的數據會話/緩存/ Cookie /等...另一種選擇可能是部分後[UpdatePanel](http://www.asp.net/ajax/tutorials/understanding -Asp淨Ajax的UpdatePanel中的觸發器)。 – Zachary 2011-06-10 16:25:52

回答

3

將對象放入當前用戶的Session

+0

好吧,仍然在做一個完整的回發考慮正確的方式來做到這一點?或者我應該使用某種Ajax或部分回發來更改頁面的某些部分? – uscere90 2011-06-10 16:19:30

+0

你現在正在完全不同的主題。在回發之間爲用戶保留變量和對象最好由'Session'處理 - 或者InProc使用SQL Server數據庫。無論您是想要完成一個回發還是使用AJAX,都取決於您的應用程序的佈局。例如,刷新網格或列表可能最好使用AJAX刷新處理,因爲您只需抓取數據而不是頁面佈局元素等。希望有所幫助。 – Yuck 2011-06-10 16:22:11

+0

我不會推薦在會話中放置對象。 – Chris 2011-06-10 16:34:11

2

把你所有的初始化的東西在(!IsPostback) { }並使用部分回發。這樣初始化代碼在回發期間不會再被調用。

+0

我已經在Page_Load部分中了 - 我遇到的問題是可變範圍。我有很多方法用於處理這些對象,所以它們被聲明爲類作用域變量。當我做完整的回發時,他們會重新申報,舊的會被銷燬。 – uscere90 2011-06-10 16:56:03

+2

您可以使用ViewState而不是Session來保存變量。這樣他們只能在該頁面中生活。 – Marcus 2011-06-10 18:01:05