지금 당장 어제 밤 MVC 3을 배웠습니다. 해결 방법은 매우 간단 할 것 같지만 ' 그것을위한 해결책을 찾는 것처럼 보입니다.MVC 양식 제출 - 브라우저에서 직접 액세스 할 수없는 작업으로 리디렉션
나는 간단한 문의 양식을 가지고 있습니다. 최종 사용자가 양식을 채우고 제출합니다. 그들이 양식을 제출할 때 최종 사용자를 기본적으로 "감사 페이지"인 "inquiry submitted"페이지 /보기를 렌더링하는 동일한 컨트롤러의 다른 작업으로 리다이렉트합니다.
컨트롤러가 그렇게 설정되었습니다.
public ActionResult ContactUs()
{
return View();
}
[HttpPost]
public ActionResult ContactUs(ContactInfo contactInfo)
{
if (!ModelState.IsValid)
{
return View();
}
//perform some business logic
return RedirectToAction("InquirySubmitted",contactInfo);
}
public ActionResult InquirySubmitted(ContactInfo contactInfo)
{
return View(contactInfo);
}
문제 : 나는 최종 사용자가 브라우저를 통해 InquirySubmitted 활동에 직접 이동하지 않습니다.
컨트롤러의 ContactUs 동작만으로 사용자를 Inquiry 제출보기로 보낼 수 있습니다.
난 단지 컨트롤러과 같이 호출 할 수 있도록 비공개 InquirySubmitted 동작을 만들기 위해 시도 :
private ActionResult InquirySubmitted(ContactInfo contactInfo)
을하지만 내가 브라우저를 강제하고 있기 때문에 완전히에 의해 InquirySubmitted 요청에 이해 오류가 발생합니다 RedirectToAction()을 사용합니다.
그럼 내 질문에 간단합니다 :이 문제에 가장 적합한 "MVC 3 스타일"솔루션은 무엇입니까?
@ Splash-X - 그가 할 수있는 한 가지 방법이지만 사용자가 어떤 이유로 페이지를 새로 고치면 연락처 요청을 다시 제출합니다. 일반적으로이를 해결하기 위해 Post-Redirect-Get 패턴을 사용합니다. –
@ Splash-X 예, 솔루션이 기술적으로 작동합니다. 감사합니다. 이것은 옵션입니다. 그러나 Mystere Man이 F5 키를 눌렀을 때 새로 고침이 다시 시작되어 모든 비즈니스 로직을 다시 시작하고이 솔루션이 PRG 패턴을 깨뜨렸다 고 말하면서 좀 더 이상적인 솔루션을 기대했습니다. 현재로서는 내가 볼 수있는 유일한 해결책은 최종 사용자가 연락처 페이지에서 왔는지 확인하기 위해 세션을 사용하고 직접 InquirySubmitted에 액세스하려고 시도하면 다시 보내지 않는 것입니다. 이 솔루션은 웹 양식 솔루션과 동일합니다. – Matt
@Matt 동의하지만 최종 사용자가 URL을 요청할 수 없도록 요청했습니다. 액션을 생성함으로써 항상 URL을 요청할 수 있습니다. Ek0nomik이 맞습니다. 세션 변수를 사용하여 페이지를 볼 수 있는지를 추적 할 수 있습니다. 또한 참조 URL을보고 양식 페이지인지 확인하고, 그렇다면보기를 표시하고 그렇지 않으면 양식으로 리디렉션을 리턴 할 수 있습니다. –