维护MVC2控制器中的状态

时间:2010-09-23 23:30:39

标签: c# .net asp.net-mvc-2

我想在控制器上的方法调用 之间保持模型状态 这可能吗?

控制器是在调用某些方法时创建的,并在被调用方法完成执行时被销毁?

如果不是......我怎样才能维持方法调用之间的状态? 如果可能的话......怎么写?

感谢

4 个答案:

答案 0 :(得分:3)

让我们保持简单! : - )

您问了以下问题:

  

我想在控制器上的方法调用之间维护模型状态。

     

这可能吗?

答案: 是的,它是

  

控制器是在调用某些方法时创建的,并在被调用方法完成执行时被销毁?

答案: 是的,它不会保留任何状态 - 它只返回操作生成的结果

如果不是......我怎样才能维持方法调用之间的状态?如果可能的话......怎么写?

答案:

我们在使用ASP.NET MVC2的当前业务应用程序中遇到了同样的问题,并提出了以下解决方案:

<强>将(S):

此应用程序的概念验证包含一些使用全局会话的特殊功能。 (请注意,会话保存在网络服务器上)

在ASP.NET MVC中保存和读取会话:

public Action SaveIntoSession()
{
  ...
  Session["SessionData"] = "Something to be stored in session";
  ...
}

public action ReadFromSession()
{
  ...
  // UNBOXING is required when you're using the session as ASP.NET doesn't know what is stored into the session
  string sessionData = (string)Session["SessionData"]; 
 ...
}

第二个还有另一个概念,即将每个请求所需的信息保存到数据库的会话表中。 (但我不会太深入了解..查看this article了解更多信息 - 虽然它是php,但你可以很容易地理解这个概念)

第3次使用Charlino提到的TempDataDictionary。这个问题是,它只会将状态从一个呼叫持续到另一个呼叫。下一个请求将删除存储的所有数据。 (TempData主要用于向用户显示错误..)

public Action SaveIntoTempData()
{
  ...
  TempData["TempData"] = "Something to be stored ONE request ONLY";
  ...
}

public Action ReadFromTempData()
{
   ...
   string tempData = (string)TempData["TempData"];
}

4你也可以使用ViewDataDictionary。建议不要将其与敏感数据一起使用。 (查看this thread了解更多信息)

public Action SaveIntoViewData()
{
  ...
  TempData["ViewData"] = "Something to be stored into the page";
  ...
}

public Action ReadFromViewData()
{
   ...
   string viewData = (string)ViewData["ViewData"];
}

在一天结束时。您和您的团队最符合要求。

答案 1 :(得分:2)

即使在MVC中,您也可以访问标准的ASP.NET会话。检查the docs

答案 2 :(得分:1)

TempData / TempDataDictionary会合适吗?

HTHS,
查尔斯

答案 3 :(得分:0)

我认为默认情况下你应该尝试Restfull方法。如果这不可行,那么要么序列化到会话对象,要么存储在Singleton或类似的东西中。

默认情况下,我不认为MVC在调用之间保持状态。