繁体   English   中英

在MVC2控制器中维护状态

[英]Maintaining state in a MVC2 Controller

我想保持模型状态之间的方法控制器呼吁。
那可能吗?

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

如果没有,如何维护方法调用之间的状态? 如果可能的话……该怎么写?

谢谢

让我们保持简单! :-)

您问了以下问题:

我想在控制器的方法调用之间保持模型状态。

那可能吗?

答: 是的

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

答: 是的,它不会持久保存任何状态-它仅返回操作生成的结果

如果没有,如何维护方法调用之间的状态? 如果可能的话……该怎么写?

回答:

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

解决方案:

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

在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"]; 
 ...
}

第二个概念是将每个请求的必需信息保存到会话表中的数据库中。 (但我不会对此进行深入探讨。请查看本文以获取更多信息-尽管它是php,但您可以很容易地了解这个概念)

第三将使用Charlino提到的TempDataDictionary。 这样做的问题是,它只保留一个调用到另一个调用的状态。 下一个请求将删除所有存储的数据。 (TempData通常用于向用户显示错误。)

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

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

4th您也可以使用ViewDataDictionary 不建议与敏感数据一起使用。 (检查此线程以获取更多信息)

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

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

在一天结束时。 最适合您的需求取决于您和您的团队。

您甚至可以在MVC中访问标准ASP.NET会话。 检查文档

TempData / TempDataDictionary是否合适?

HTH,
查尔斯

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM