2010-09-23 106 views
0

我想在控制器的方法調用之間保持模型狀態。
這可能嗎?在MVC2控制器中維護狀態

控制器是在其某些方法的調用時創建的,並在被調用方法完成時被銷燬?

如果不是......如何維護方法調用之間的狀態? 如果可能的話......它是如何寫入的?

謝謝

回答

3

讓我們保持這個簡單! :-)

你問以下幾個問題:

我想保持模型狀態之間的方法控制器呼籲。

這可能嗎?

答:是的,這是

控制器在它的一些方法調用創建,並在被調用的方法完成執行銷燬?

答:是的,它不會保留任何狀態 - 它只是返回的動作

如果沒有產生結果...我怎樣才能保持方法調用之間的狀態?如果可能的話......它是如何寫入的?

答:

我們有同樣的問題在我們使用ASP.NET MVC2當前的業務應用,並與以下解決方案提出了:

解決方案(S):

1他對此應用程序的概念驗證包含一些使用全局會話的特殊功能。(請注意,會話保存在網絡服務器)

儲蓄與ASP.NET MVC從會話閱讀:

public Action SaveIntoSession() 
{ 
    ... 
    Session["SessionData"] = "Something to be stored in session"; 
    ... 
} 

public action ReadFromSession() 
{ 
    ... 
    // UNBOXING is required when you're using the session as ASP.NET doesn't know what is stored into the session 
    string sessionData = (string)Session["SessionData"]; 
... 
} 

第二有節省爲每個請求所需要的信息到會話表到另一個概念你的數據庫。 (但我不會太深入..檢查this article欲瞭解更多信息 - 雖然它是PHP,你可以很容易地讓你的頭在這個概念周圍)

第3將會使用Charlino提到的TempDataDictionary。問題在於,它只能將狀態從一個呼叫持續到另一個呼叫。所有存儲的數據將被下一個請求刪除。 (TempData的主要是用來顯示錯誤給用戶。)

public Action SaveIntoTempData() 
{ 
    ... 
    TempData["TempData"] = "Something to be stored ONE request ONLY"; 
    ... 
} 

public Action ReadFromTempData() 
{ 
    ... 
    string tempData = (string)TempData["TempData"]; 
} 

4您也可以使用ViewDataDictionary。不建議使用敏感數據。 (檢查this thread獲取更多信息)

public Action SaveIntoViewData() 
{ 
    ... 
    TempData["ViewData"] = "Something to be stored into the page"; 
    ... 
} 

public Action ReadFromViewData() 
{ 
    ... 
    string viewData = (string)ViewData["ViewData"]; 
} 

在這一天結束。這取決於你和你的團隊什麼最符合要求。

0

我認爲默認情況下,你應該嘗試Restfull方法。如果這是不可行的,那麼要麼串行化會話對象,要麼存儲在單例中或類似的東西中。

默認情況下,我不認爲MVC維護呼叫之間的狀態。

1

TempData/TempDataDictionary適合嗎?

HTHS,
查爾斯

+0

TempData只會存活重定向,所以在這種情況下它不起作用。 – Ryan 2010-09-24 02:01:26

+0

問題是解決方法*維持方法調用之間的狀態* - 我認爲TempData實現了這一點。是?當然還有其他的方法,但是在這種情況下,由於模棱兩可或者問題的存在,它有點盲目。 – Charlino 2010-09-24 03:35:45

+0

對不起,我認爲「方法調用之間」意味着來自瀏覽器的不同調用。 – Ryan 2010-09-26 03:00:29

2

您可以訪問標準的ASP.NET會話,甚至在MVC。檢查the docs