2014-03-13 4 views
1

다른 동작 방법의 모델 개체로 작업으로 리디렉션해야합니다. 괜찮아요.하지만 이렇게하면 URL 주소 표시 줄의 모든 매개 변수를 볼 수 있습니다. 그것은 지불에 관한 것이므로, 나에게는 좋지 않습니다.Asp.net MVC RedirectToAction URL의 매개 변수 표시

나는이 기본 전달 ID를 할 수 있지만 내 모델은 viewmodel이며 키가 없습니다.

어떻게 예방할 수 있습니까?

+0

검사에서 해당 모델을 검색 할 수 있습니다이 http://stackoverflow.com/questions/11209191/how-do-i-include-a-model- with-a-redirecttoaction/11209320 # 11209320 – Shyju

답변

2

이 경우 실제로 수행해야하는 작업은 redirect이 아닌보기를 반환하는 것입니다.

처럼 :

return View(viewModel); 

하지만 당신이 정말로 리디렉션을 선호하는 경우, 당신은 TempData의 뷰 모델을 배치하고 작업에 리디렉션 할 수 있습니다 :

TempData["MyViewModelFromRedirect"] = viewModel; 

그리고 당신의

리디렉션 액션 :

var ViewModel = (MyViewModel)TempData["MyViewModelFromRedirect"]; 
+0

TempData를 사용하는 것이 안전합니까? 두 명의 사용자가 동시에 게시물의 제출 버튼을 클릭하면 어떻게됩니까? 어떤 문제? 답변 주셔서 감사합니다 – umki

+0

각 사용자에 대해 세션에 저장된 여러 사용자의 문제는 없습니다. TempData는 기본적으로 세션 저장소입니다. 유일한 차이점은 특정 시간이 지나면 세션이 만료되는 반면 TempData는 다른 요청에 대해 TempData.Keep() 메서드를 사용하여 구체적으로 유지하지 않는 한 리디렉션 된 작업이 완료되는 즉시 만료됩니다. – Ganesh

+0

고맙습니다. – umki

1

리디렉션 결과는 HTTP 리디렉션 결과 (302)를 브라우저로 반환하고, url의 전체 매개 변수와 함께. 모델 속성을 routevalues에 전달하면 문자열로 serialize됩니다.

브라우저에서 (클라이언트 측에서) 모든 매개 변수가 표시되고 브라우저가 새 URL에 다른 GET 요청을 보냅니다.

이 경우 컨트롤러에서 TempData를 사용하여 모든 서버 측 데이터를 설정하는 것이 좋습니다. 그런 다음 새 작업으로 리디렉션합니다.

TempData["mymodel"] = myModel; 
return Redirect(Url.Action("newaction", "newcontroller")); 

그리고 새로운 작업에, 당신은 단지 TempData

+0

302 응답, 아니 300 – Shyju

+0

답변 해 주셔서 감사합니다. 다른 게시물에 대한 의견을 참조하십시오. – umki