2011-01-28 94 views
0

我期待構建一個ajax頁面;這是一個報告頁面。默認情況下,加載今天的報告。在頁面上有一個日曆控件,當用戶點擊日期時,用相應的數據重新加載gridview。這是否被認爲是良好的做法:會話對象設計模式

1) on the first page load, query the data for the page 
2) put the query result in the session object and display it in a gridview 
3) if the user requests new data, get new data from the query with different parameters 
4) put the result of the second query in the session object and display it 
5) if the user then requests the data from the first query, get it from the session object 
6) do the sorting and paging with the data held in the session. 

注意:每個查詢的數據將包含大約300-500行和大約15列。我想用ajax調用所有這些。有什麼建議和避免陷阱。

感謝。

+0

您是否正在使用Session來存儲您打算在頁面之間共享的臨時信息?這聽起來像是你正在加載會話的東西,會顯示在生成數據的頁面上。如果是這樣,那麼你不應該首先將數據放入會話中。 – 2011-01-28 02:04:49

+0

這是一個報告頁面。默認情況下,加載今天的報告。在頁面上有一個日曆控件,當用戶點擊日期時,用相應的數據重新加載gridview。 – frenchie 2011-01-28 02:20:00

回答

2

我會用Backbone.js

  1. 服務器以JSON格式生成報告。
  2. 客戶端具有此報告的Backbone.js模型,該模型綁定到JSON端點。
  3. 客戶端將報告模型呈現爲骨幹視圖。
  4. 客戶端只在適當的時候從服務器重新加載報告。

來自之前查看過的日期的報告仍然會作爲骨幹模型實例存在於客戶端中,因此除非用戶強制執行,否則不需要從服務器重新加載。我相信這是你主要關心的問題?

你可能仍然處於can-do-without-a-client-side-framework的境界,但如果你打算做更多的這些頁面或變得更復雜,你可以很快地去意大利麪條沒有Backbone.js之類的東西。

PS。我只注意到這是.NET相關的。我對.NET一無所知,所以也許有一個內置的客戶端框架可以做類似的事情。

EDIT(閱讀評論後更新):

對於服務器端緩存,我覺得在DB或單獨的專用高速緩存存儲區中的任何一個非規範化的報告表(例如內存緩存)比一個更好的做法會話對象。

這取決於。如果有人說,每個用戶每天有1個可能的報告,並且您沒有設置memcache,並且您不想因爲任何原因使用數據庫,那麼將它存儲在其會話中可能有意義目的。但是,如果每天的報告對所有用戶都是相同的,那麼現在您將其緩存N次而不是1次。它可能很難從外部掛鉤無效,並且用戶在註銷時丟失緩存。

所以,我可能只是有一個典型的get-or-set模式,先嚐試從緩存中加載報告,然後回退到DB。然後,只有在用戶強制執行或用於創建報告的數據已更改時,纔會使緩存的報告無效/更新。 AJAX呼叫按日期請求報告或識別報告。

1

你忘記了窗戶。客戶端不是一個窗口,客戶端是一個瀏覽器,它可以包含許多窗口/選項卡。你需要確保你正在渲染/餵食正確的窗口。通常我通過提交隱藏值來處理這個問題。

問題是分離恢復會話/開始一個新窗口。

+0

客戶用戶代理與這個問題有什麼關係?客戶端用戶代理並不認爲使用會話來存儲數據庫結果以顯示在同一頁面上是好的或壞主意。 – 2011-01-28 02:07:40

+0

@Frazell Thomas用戶代理?什麼?我在哪裏寫什麼,誰在哪裏,什麼?幾時?怎麼樣? – stefan 2011-01-28 02:08:51

2

由於您希望在Javascript Ajax scenerios中使用數據,因此創建HTTP Handler以根據需要查詢並返回所需的數據結果集是最有意義的。

使用會話對象不是一個解決方案,因爲它不能被異步訪問。因此,您的頁面將無法查詢此數據以反饋給您的Javascript對象(除非您創建了一個HTTP處理程序以將其發回,但當您只能直接在HTTP處理程序中查詢數據時,這將毫無意義)。

0

我不打擾在會話中持有多個查詢副本。據推測,你希望在Session中保存它的主要原因是爲了提高排序/分頁速度。用戶期望這些速度相對較快,但選擇新的日期可能會更慢。另外,他們真的會重新加載第一個查詢的可能性有多大?

其他答案通常存儲在會話中引起了很大的隱患。