2015-09-08 117 views
0

昨天我正在研究我的asp.net mvc應用程序,我試圖在某個控制器在範圍內時緩存某個字段中的某些數據。每當新視圖打開時,該字段都會清除。保持控制器在範圍內

問題: 當瀏覽由所述控制器處理的視圖時,是否可以將控制器保持在範圍內?

private static List<string> _listOfStrings; 

[Authorize] 
public ActionResult ToView1() 
{ 
    _listOfStrings = new List<String>(){"test","test2"}; 

    var model = new Model(); 
    return View(model); 
} 

[Authorize] 
public ActionResult FromView1ToView2() 
{ 
    var model = new Model(_listOfStrings); 
    //the issue at hand is that '_listOfStrings' is not persisted. 
    return View(model); 
} 

任何人都有想法,如果這是可能的? (清單很大,所以我寧願不通過模型發送到視圖,反之亦然)

回答

2

您需要閱讀有關ASP.NET MVC lifecycle

簡短回答:不,你不能導致Controller在一個動作的調用後被銷燬。詳細答案:您可以將數據存儲在TempDataSession屬性中。

+0

感謝您的快速反應,我期待儘可能多......我會嘗試TempData,但我恐怕會太過分。 Session,我不是那麼喜歡的。 – Yaw

+1

您可以在兩個序列操作中使用TempData。在第二個操作中,您可以重寫TempData,因此您可以在第三個操作中使用它,等等。 –

+1

@Yaw'TempData'是'Session'! (除了它只持續一個請求,所以如果用戶刷新瀏覽器消失) –

0

_listOfStrings是與listOfStrings不同的變量。你沒有寫信給靜態字段,也沒有閱讀靜態字段。在你提供的代碼中,_listOfStrings甚至沒有定義。

使用一個靜態變量,此代碼將工作。

+1

感謝您指出type-o,但在我的代碼中,它是按照您所說的寫的,因爲上面指出的原因而不起作用。 – Yaw

+0

我不明白。無論正在創建和銷燬的對象如何,靜態字段都會保留。如果你在第二個方法中放置一個斷點,_listOfStrings應該是一個包含2個值的列表。 – CooncilWorker

+0

我也不明白......這就是爲什麼我發佈這個問題。閱讀上面的文章,它提供了大量的信息。 – Yaw