[英]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.