清爽的页面复位输入 - 是有可能避免这种情况?

我使用MVC 4和MVC期货[Serializable]功能,通过一个多步骤的向导留存数据。 该向导本身只是收集来自用户的信息,然后生成基于这些输入的自动回复。 我有没有必要投入永久存储到数据库中。

现在,我已经遇到了一点,我可以在向导的确认页面上处理的问题,但我想知道如果我能避免需要做到这一点。 我的问题是,如果用户点击“刷新/ F5”(你知道他们会),他们对特定步骤的所有输入和所有以前的步骤被删除。 如果他们在确认之前的最后一步,他们不会意识到他们已经清除一切,他们在输入之前的步骤。 处理的方法是把一个验证摘要确认页面,然后它会显示每一个输入需要重做的。 这就出现了一个问题,因为它破坏了用户体验(他们拥有所有的步骤回去重新输入)。

这里是我的控制器代码示例:

//This is the serialization: private MyData myData; protected override void OnActionExecuting(ActionExecutingContext filterContext) { var serialized = Request.Form["myData"]; if (serialized != null) //Form was posted containing serialized data { myData = (MyData)new MvcSerializer().Deserialize(serialized, SerializationMode.Signed); TryUpdateModel(myData); } else myData = (MyData)TempData["myData"] ?? new MyData(); } protected override void OnResultExecuted(ResultExecutedContext filterContext) { if (filterContext.Result is RedirectToRouteResult) TempData["myData"] = myData; } ... //This shows a mid-step in the wizard - only as an example: public ActionResult Step2(string backButton, string nextButton) { if (backButton != null) return RedirectToAction("Step1"); else if ((nextButton != null) && ModelState.IsValid) return RedirectToAction("Step3"); else return View("Step2", myData);

我一直在研究最为昨天和今天上午就有关各种事物[Serializable]TempDataSessionOutputCache之类的,包括刷新页面并持久化数据,但无法找到任何一点。

这是有道理的唯一的事情是在return呼,这在一个特定的一切后发生ActionResult 。 我不知道这是点上,但它使一个页面刷新将导致所有输入的数据在这种情况下消失,因为该模型是不打,直到最后的感觉。 但是,如果这是我无法弄清楚如何解决它不会破坏我已经有代码的问题。

我明白任何指导。

PS没有为MVC 4没有标签,所以我只是选择了MVC和MVC 3。

--------------解决方案-------------

这个问题与TempData的。 里面存储的数据只针对一个请求,你的情况是重定向生存。

第一种可能性是,保持数据在TempData的较长:

...
else
{
myData = (MyData)TempData["myData"] ?? new MyData();
TempData.Keep();
}

这还挺多它同化到会话。 所以,你可以使用Session,而不是TempData的。

另一种方案是将数据存储在一些临时表在数据库中的每个步骤,这样就可以对每一个步骤进行检索。 我猜你有这个问题上每一步,不仅在最后一个显示摘要。 无论如何,如果你只关心最后一步,为什么不将数据保存到数据库中呢?

分类:asp.net的MVC 时间:2015-03-15 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.468 (s). 10 q(s)