2015-09-08 120 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