2014-05-14 34 views
1

在ASP.NET MVC從在一個區域一個控制器我使用:ASP.NET MVC溫度數據和RedirectToAction網片形式

TempData["Model"] = model; 

然後RedirectToAction到模型傳遞到另一個區域的另一個控制器。在控制器操作方法中,我立即將數據從模型中取出。

我擔心如果我部署到網絡農場,那麼TempData使用會話狀態會導致問題,但我不確定在這種情況下是否可以避開它,因爲我立即再次從TempData中拔出模型在我傳遞給的操作方法中?

+0

[模擬問題](https://www.google.co.uk/search?q=tempdata%20web%20farm%20site:stackoverflow.com) – DaveParsons

回答

0

如果您使用的是InProc會話狀態,則可能會遇到問題,因爲在重定向時,您可能會被髮送到其他服務器,而同一會話將不可用。

兩種可能的選擇是執行cookie based TempData供應商或切換到另一個session-state mode。請注意,基於Cookie的TempData對於用戶來說是完全可見的,儘管存在加密數據的實現。

2

你是正確的關注,一個RedirectToAction向客戶發送包含重定向的資源的URL的302消息。這是客戶負責爲重定向資源創建新請求的責任。不保證此資源將由原始服務器提供。從TempData中立即提取請求的事實對這種方法沒有任何影響,在某些時候它會出錯。

您需要有一些管理會話的方法。您可以配置HTTP session affinity,以便從服務器提供的請求將始終返回到始發服務器。

您可以使用cookies for session state或實施session state provider

這個blog post也是一個很好的開始在選項的概述。

0

避免一起使用TempData。如果您在重定向中發送模型,請使用類似

RedirectToAction("MyAction", new {model = myModel}); 

public actionresult MyAction(model model) 
{ 
    /// Mode Code 
    return View(MyView, model); 
} 

假設您的控制器操作將採用模型作爲參數。