MVC 4 및 MVC Futures [Serializable]
기능을 사용하여 다중 단계 마법사를 통해 데이터를 유지합니다. 마법사 자체는 사용자로부터 정보를 수집 한 다음 해당 입력을 기반으로 자동 응답을 생성합니다. 나는 입력을 DB에 영구 저장할 필요가 없다.페이지를 새로 고침하면 입력이 재설정됩니다.이를 피할 수 있습니까?
지금은 마법사의 확인 페이지에서 처리 할 수있는 문제가 조금 있지만 문제를 해결할 수 있는지 궁금합니다. 내 문제는 특정 단계에서 사용자가 "새로 고침/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]
, TempData
, Session
, OutputCache
관련된 다양한 일에 오늘 아침에 등을들 수 있으며, 데이터는 지속되지만 지점에서 아무 것도 찾을 수 없습니다.
return
호출에서 의미가있는 유일한 것은 ActionResult
의 모든 것 이후에 발생합니다. 그게 중요한지는 모르겠지만, 페이지 새로 고침으로 인해 모델이 끝날 때까지 치지 않기 때문에이 상황에서 입력 된 모든 데이터가 사라질 수 있습니다. 그러나 문제가 있다면 이미 가지고있는 코드를 깨지 않고 해결하는 방법을 알 수 없습니다.
나는 어떤 지침을 주셔서 감사합니다.
P. MVC 4 태그가 없으므로 MVC 3을 선택했습니다.
이렇게했습니다. 호기심, 나는 그것을 OnResultExecuted에 두는 것을 시도하고 잘 작동한다. 마지막 질문에 대한 짧은 대답 : 저는 프로그래머가 아닙니다. 긴 답변 : 단계를 거쳐야 만 최종 결과가 사용자의 선택에 따라 자동으로 응답됩니다 (계산 된 합계 또는 상황에 대한 일반적인 평가). 나는이 시나리오가 아닌 다른 시나리오에서 데이터를 유지하려고합니다. – REMESQ