ASP.NET MVC 응용 프로그램에서 Redirect After Post 패턴을 사용하고 있습니다.ASP.NET MVC에서 리디렉션 후
- 사용자가 자신이 양식을 작성하도록 요청된다
/controller/index
로 이동 : 나는 다음과 같은 시나리오가 있습니다. - 양식 값은
/controller/calculate
으로 게시됩니다. Calculate
액션은 입력을 기반으로 계산을 수행하고 작업 결과를 포함하는 복잡한 객체를 인스턴스화합니다. 이 개체는TempData
에 저장되고 사용자는/controller/result
으로 리디렉션됩니다./controller/result
은TempData
에서 결과를 검색하여 사용자에게 렌더링합니다.
이 방법의 문제점은 /controller/result
에 결과를 보면서 사용자가 F5 안타 더 TempData
로 렌더링 할 수없는 페이지가 만료되었고 결과 개체가 더 이상 사용할 수 있다는 것이다.
이 동작은 사용자가 원하지 않습니다. 한 가지 가능한 해결책은 POST 후에 리디렉션하는 대신 결과보기를 렌더링하는 것입니다. 이제 사용자가 F5를 누르면 폼을 다시 게시할지 묻는 브라우저 대화 상자가 나타납니다. 이것은 또한 바람직하지 않았습니다.
내가 생각했던 가능한 해결책은 결과 개체를 직렬화하고 리디렉션하기 전에 URL에 전달하는 것이 었습니다. 그러나 AFAIK에는 GET 요청의 길이에 몇 가지 제한이 있으며 개체가 꽤 커지면이 제한에 부딪 힐 수 있습니다 (특히 base64로 인코딩 된 경우).
또 다른 가능성은 TempData
대신 Session
개체를 사용하여 결과를 유지하는 것입니다. 그러나이 솔루션을 구현하기 전에 더 나은 방법이 있는지 알고 싶습니다.
UPDATE :
또한 나는 경우가 실제로 작동하는 /controller/result
액션 내부 TempData
에 결과 개체를 다시 넣어 발견 문제 조사 :
public ActionResult Result()
{
var result = TempData["result"];
TempData["result"] = result;
return View(result);
}
그러나이 종류의 느낌을 더러운. 이 접근법에 부작용이있을 수 있습니까 (예 : 현재 InProc을 사용하는 out-of-process 세션 공급자로 전환)?
"리디렉션"이라고 말하면 RedirectToAction을 (를) 호출하고 있습니까? – Will
예, RedirectToAction. –