我有一个ASP.NET MVC4向导。要从一步到另一步传递一个大视图模型,我使用期货装配。我用
序列化我的模型@Html.Serialize("model", Model, SerializationMode.Signed);
并在控制器中反序列化
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["model"];
if (serialized != null)
{
model = (BausparViewModel)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed);
TryUpdateModel(model);
}
...
}
我在
中设置了TempDataprotected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["model"] = model;
}
每个向导步骤都有自己的视图,我使用RedirectToAction(“ActionName”)管理控制器中的上一个/下一个操作
一切正常,只要浏览器不使用F5或菜单进行刷新。在这一点上,控制器再次被调用。控制器已有模型,但TempData不会再次保存。
但缺少两个枚举属性。它们用于前面的步骤。他们通过RadiobuttonFor绑定了视图。
那么为什么有一个不完整的模型?
提前致谢 csteinmueller
答案 0 :(得分:0)
对于任何超过1个请求的内容,您不应使用TempData
。使用Session
或其他一些长期存储机制。
TempData
旨在从字典中读取后删除值。这就是TempDataDictionary
包含Peek
和Keep
等方法的原因。这些方法让你明确地告诉字典“嘿,在我读取它之后不要删除它”,因为默认情况下,它会在你读取之后删除它。