我想在控制器上的方法调用 之间保持模型状态 这可能吗?
控制器是在调用某些方法时创建的,并在被调用方法完成执行时被销毁?
如果不是......我怎样才能维持方法调用之间的状态? 如果可能的话......怎么写?
感谢
答案 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在调用之间保持状态。