문제

내 사이트의 모든 페이지에서 html.renderaction을 사용하여 일반적인 로그인 양식을 렌더링하고 있습니다.

사용자가 텍스트 상자에 세부 정보를 입력하고 '제출'을 클릭하면 로그인을 처리하는 컨트롤러에 게시물을 수행합니다.

잘못된 이메일 주소를 입력하는 것과 같은 실수를 저지르면 ModelSTate를 오류 메시지로 채우고 이전에있는 모든 페이지로 다시 리디렉션됩니다.

문제는 RenderAction이 별도의 요청으로 발생하기 때문에 ViewModel을 잃고 있다는 것입니다.

TempData에 넣을 때에도 각각의 별도 요청에서 TempData가 플러시되므로 손실됩니다.

연속 HTML.RenderAction 호출 사이에 데이터를 보존하는 방법이 있습니까?

그렇지 않다면, 내가 이것을 어떻게 해킹 할 수 있는지에 대한 제안이 있습니까? (데이터를 세션에 넣어야합니까?)

도움이 되었습니까?

해결책

내가 당분간 내가 한 일은 다음과 같습니다. (이것은 아마도 가장 이상적인 솔루션이 아닙니다.)

나는 'PreserveViewDataAttribute'를 만들었습니다. 세션에서 ViewData를 보존하고 싶은 행동을 취했습니다.

BaseController에서는 다음을 수행하는 '리디렉션'메소드를 내 자신의 방법으로 대체했습니다.

  1. 그것을 부르는 행동 방법에 대한 참조를 얻습니다 (여기서 약간의 반사)

  2. 이 메소드가 정의 된 'PreserveViewDataAttribute'가 있는지 확인합니다.

  3. 그렇다면 현재 ViewData를 세션 변수에 복사하십시오. (변수의 레이블은 현재 동작 이름과 동일하며 '_viewdata'가 끝에 닿았습니다.)

  4. 두 경우 모두 기본 리디렉션 메소드를 호출합니다.

그런 다음 BaseController에서 'PreservedViewData'라는 속성을 만들었습니다. (또는 찾을 수없는 경우 Null을 반환합니다).

따라서 원하는만큼 ViewData를 보존하려면 'PreserveViewDataAttribute'로 만 행동을 장식 한 다음 필요할 때마다 'PreservedViewData'를 호출하면됩니다.

소스 코드를 원한다면 알려주세요.

다른 팁

Kazi Rashid의 저수지 구역 섹션의 접근 방식을 좋아할 수 있습니다.

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx#prg

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top