2011-07-28 43 views
1

我正在一個MVC3和Razor網站。用戶在最終處理數據之前必須通過一些選擇來選擇他們的方式。堅持數據跨請求MVC3和剃刀

例如: 客戶名單 - >版本列表(由客戶端過濾) - >等(由版本過濾)

一旦用戶選擇了一個客戶端,它們選擇用於所述客戶端的版本。所以我在查詢字符串上傳遞客戶端ID。對於版本控制器的每種模式,我都傳遞客戶端ID。在我想要顯示客戶端名稱的視圖中,我正在查詢客戶端的數據庫並將其填充到ViewBag中。這看起來效率很低。我覺得我可以使用cookie來保存客戶端名稱&名稱。

現在,我已經得到了我的版本控制完成的,我以後每次控制器再次面臨同樣的模式,但現在我需要堅持客戶和版本...

什麼是首選的方法爲了在不同的請求中保存這樣的信息?

回答

1

這似乎是非常低效的

這就是數據庫中提出,並基於欄=>查詢數據進行了優化,如果你把指標在這些領域將是驚人快速。當然,Session,Cookies,Cache是​​一些常用的技巧,可以用來限制對數據庫的查詢數量,但是你必須假設你可能以這種方式獲得數據的可能性(如果某些其他線程/進程修改數據庫中的數據不再得到正確的結果)。

因此,在做任何過早的優化之前,我會推薦你​​:錘擊你的數據庫直到你發現這實際上是你的應用程序的一個瓶頸。數據庫可能會在一些非常高流量的應用程序中成爲瓶頸,你應該採用上述技術之一(或者當然在一些寫得不好的應用程序中,但是暫時排除這種可能性)。

+0

我與你的意見與過早的優化同意。我只是想確保我沒有做一些瘋狂的愚蠢的聞所未聞的事,因爲我是新手,不瞭解球員......我現在要選擇你的答案,因爲它是我的這樣做,但我會根據@brodie的建議來定義TempData。這種方法只是「感覺」是錯誤的...... –

0

您應該使用TempData,它允許您在當前和下一個HTTP請求之間傳遞數據。請記住,它使用會話。

格雷格鐐銬有所有關於TempData的一篇大文章here

看到這樣類似的問題MVC3 multi step form - How to persist model object

+0

因爲我的ASP經典厭惡會議,我現在迴避這個,因爲我已經有了一個計劃,只剩下幾個控制器......我會看看TempData並更新我的答案,如果它平淡。 –