2013-12-10 36 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

相关问题