2013-12-10 73 views
1

我使用asp MVC 4.我有一個控制器,我想在他的功能之間共享同一個對象。我想過一個數據成員,但它不起作用。這是我的代碼:如何在同一控制器的功能之間共享對象?

public class MyController : Controller 
{ 
    public MyObject obj; 

    public ActionResult Index() 
    { 
     obj = new MyObject(); 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

是否有可能保持此對象之間的功能?我曾經創建了TempDataViewBags用於共享數據,但我不確定這是否是管理大對象的正確方法。

+0

每次用戶請求頁面時都會重新創建另一個操作控制器。您可以使用Session在一個用戶調用和數據庫或緩存之間共享變量,以在多個用戶之間共享值。 – FLCL

回答

2

它是空的,因爲MVC框架創建一個新的控制器來處理不同的請求,因此obj也是不同的。

如果你讓你的對象單例或者簡單地使它成爲靜態,它就可以工作。

public static MyObject obj; 
+0

謝謝,我沒有想過靜態,現在看起來很明顯:) – Alex

+0

這會跨越不同的用戶會話嗎?這似乎並不安全。 – rhughes

+0

@rhuges:每個用戶會話沒有不同。如果我們想這樣做,我們可以重寫asp.net MVC IoC框架到用戶會話:) –

0

試試這個:

public class MyController : Controller 
{ 
    public MyObject obj = new MyObject(); 

    public ActionResult Index() 
    { 
     this.obj.GetData();   // Fill my object 
     return View(); 
    } 

    public ActionResult MyFunction() 
    { 
     Console.Write(this.obj);  // Always null 
     return View(); 
    } 
} 

這會阻止你的null錯誤。

如果要在回發之間保存數據,則需要查看持久性數據存儲(如基於SQL的數據庫)。

+0

它停止我的空錯誤,但obj是空的。我用靜態數據成員修復了這個問題(cf:@HiệpLê)。 – Alex

相關問題