2012-01-28 41 views
3

我有以下情況下可能需要將數據存儲在一個conroller成員變量中以便在操作之間共享它。在asp.net中的操作之間共享變量MVC

我有一個搜索表單和一個按鈕 - 單擊時,根據搜索表單參數返回的表格將返回一個完整的數據。一個行動 - 一切都很好,很乾淨。

我現在要求放置一個excel按鈕,以便用戶可以以excel格式下載表格。我不想再次運行數據庫查詢,因爲數據已經存在,但由於我使用的是服務器端的Excel組件,因此我需要服務器上的數據以便將其推送到Excel中。

我最初的想法是在我的控制器中可以存儲數據的額外變量。但我從來沒有在asp.net MVC中看到過這樣的事情。這是一種可接受的模式嗎?我的理解是每個行動都是孤立的。

回答

2

MVC模式鼓勵無狀態。這意味着如果您希望在操作之間保留數據,則需要從客戶端發佈(服務器不應維護與特定會話相關的任何狀態)。 (所以是的每個行動應該是孤立的,不應該依賴任何以前的行動,即它不應該依賴於以前的請求設置)

讀一下斯科特的博客MVC在這裏的意思是http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx

如果您在訪問數據時遇到性能問題,我的建議是使用服務器端緩存您的數據提取。這應該最好在你的應用程序數據訪問或查詢層實現,並且不應該被強烈地依賴於特定的會話

+0

感謝您的帖子。我有點直覺地意識到這一點,並且它非常有意義 - 認爲網絡是無狀態的。 – sarsnake 2012-01-28 01:28:10

2

控制器在每次請求後都會丟棄。你每次都會得到一個新的。如果你想存儲數據,最簡單的就是把它放到會話狀態。

1

我會建議使用TempData的,例如它在這裏http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

更新說明:返回文件這裏完成Returning a file to View/Download in ASP.NET MVC

這是一個正常的做法,有一個單獨的控制器來返回文件。

+0

謝謝。這是否有限制? – sarsnake 2012-01-28 01:28:38

+0

你在說什麼限制? – Kath 2012-01-28 02:00:22

+0

我剛剛閱讀文章,看起來像TempData在這裏不太合適,因爲我不會在任何地方重定向。用戶可能會也可能不會按下Excel按鈕,我無法預測他們什麼時候會。 – sarsnake 2012-01-28 02:11:33