我有一個ASP.NET MVC4嚮導。爲了一步一步地傳遞一個大的視圖模型,我使用期貨套件。序列化我的模型與瀏覽器刷新後Html.Deserialize失去TempData
@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);
}
...
}
反序列化我設置的TempData在
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["model"] = model;
}
每個嚮導一步都有它自己的觀點,我管理一個/使用RedirectToAction(「ActionName」)控制器中的下一個操作
Everything wo只要瀏覽器通過使用F5或菜單無法刷新,就很好。在這一點上,控制器再次被調用。控制器已經有一個模型,但TempData不會再保存。
但有兩個枚舉屬性丟失。它們在之前的步驟中使用。他們通過RadiobuttonFor綁定了視圖。
那麼爲什麼有一個模型是不完整的?
在此先感謝 csteinmueller
在這種情況下調用Keep方法。我讀過的mvc3嚮導中的howto使用了TempData。不是會話用戶的基礎?因爲一個用戶可能會實例化多個嚮導。這是一個外部合作伙伴的諮詢應用程序。 – csteinmueller
是的,會話是每個用戶。但是,TempData使用Session作爲其基礎數據存儲(默認情況下),因此它也是每個用戶。如果您希望允許用戶生成多個嚮導,則應該在應用程序級別管理這些單獨的嚮導(例如,如果您選擇繼續使用該向導,則可以在會話或TempData中存儲Wizard []數組)。 – danludwig
感謝您對TempData和Session的澄清。此刻,我懶得讀入tempdata。這是由mvc3嚮導教程建議的。我將在tempdata或session中接受與嚮導數組結合的答案。我認爲這會解決我的問題。 – csteinmueller