2010-11-29 2 views
3

asp.net mvc 2를 사용하여 다중 단계 폼을 작성하려고합니다. 따라서 웹 응용 프로그램에는 5 페이지가 5 단계로 표시됩니다. 각 단계에는 이전 및 다음의 두 개의 제출 버튼이 있습니다. 각 단계의 입력 데이터는 나중에 검토 할 수 있도록 저장됩니다. 예를 들어, 단계 1,2,3,4에 대한 데이터를 이미 입력했으며 단계 5에 있습니다. "이전"을 2 번 클릭하면 이전에 입력 한 데이터로 3 단계가 표시됩니다. 마찬가지로 "다음"을 클릭하면 입력 된 데이터도 4 단계에서 유지되어야합니다 (이제 3 단계에 있기 때문에). 각 단계에 사용되는 모델은 매우 다를 수 있습니다.MVC를 이용한 다중 단계 마법사 폼

각 단계마다 데이터를 저장하는 해결책을 모색 중입니다. 내가 세션 tempdata에 대해 생각하고, 둘 다 내가 사용하는 고려해야 할 단점이

  1. 세션

    • 기본 세션 쿠키 세션, 그래서 웹 브라우저 경우 세션은 잘 작동하지 않습니다 쿠키를 사용할 수 없습니다. 여기에도 IE가 쿠키를 사용할 수 없을 때 세션 변수가 손실되는 경우에만 액터가 호스트 이름을 사용하여 웹 응용 프로그램에 액세스 할 때 걱정할 필요가 있습니다. IP 주소 URL이 인 IE에서 세션이 올바르게 작동합니다.
    • 쿠키 덜 세션 : 안전하지 많은 제약을가하고 게시물 문제 (http://stackoverflow.com/questions/3972433/mvc2-cookieless-session-issue-using-post 또는 http://forums.asp.net/p/1517391/3634908.aspx)
  2. Tempdata : tempdata는 한 요청에 대해서만 지속됩니다.

정말 감사드립니다.

감사합니다.

답변

2

난 항상 세션을 사용을 저장하는 숨겨진 필드를 넣어 고려할 것입니다. 나는 당신에게 쿠키를 사용하지 않는 사람들에 대한 우려를 보았지만 쿠키를 거부하는 사용자가 많지 않다고 생각하지 않기 때문에 문제가 있다고 생각하지 않습니다.

내 세션 환경 설정은 저장 및 검색이 쉽고 설정하기 쉽다는 것입니다. 더 많은 서버로 확장 할 때 SQL Server 데이터베이스에 세션 상태를 저장하도록 응용 프로그램을 쉽게 설정할 수 있으므로 나중에 사용할 준비가되었습니다.

숨겨진 필드는 사용자가 숨겨진 필드의 값을 편집 할 수 있기 때문에 단계간에 중요한 정보가 저장되지 않은 경우에 사용됩니다.

게시물간에 공유 할 많은 정보가 있고 숨겨진 필드가 많이 필요하지 않은 경우 저장소에 개체를 만들 수도 있습니다 (세션에서 실행할 때 만들 때와 같이) 객체를 직렬화하고 base64로 인코딩 한 다음 숨겨진 필드에 저장합니다.

+0

미셸, 나는 또한 세션을 선호합니다. 하지만 나는 다른 스레드에 큰 관심을 보이고있다. http://stackoverflow.com/questions/4303579/session-lost-when-using-hostname-instead-of-ip-address-ie. 세션 변수는 MVC가 IIS에 배포되고 사용자가 IE를 사용하여 IP 주소 대신 호스트 이름으로 응용 프로그램에 액세스 할 때 null입니다. 나는 IE가 IP 주소 url (Internet Explorer에서는이 쿠키를 사용할 필요가 없음)과 Firefox가 잘 작동하는 이유가 궁금하고 firefox도 모든 경우에 잘 작동합니다. 나랑 똑같은 문제에 빠지니? 정보를 공유해 주셔서 감사합니다 – khoailang

+0

귀하의 게시물을 읽었습니다. 내가 직접 경험하지 못했던 것 중 하나입니다. 쿠키가없는 것만 경험 했습니까? – Michel

1

데이터를 데이터베이스에 저장하는 것에 반대합니까? 그렇게하면, "Prev"가되면 데이터베이스에서 페이지의 데이터를 끌어 올뿐입니다. 해당 페이지를 "임시 직원"또는 사용자가 아직 공식적으로 저장하지 않았 음을 나타내는 모든 상태로 저장할 수 있습니다. 그런 다음 세션이나 그와 비슷한 것에 대해 걱정할 필요가 없습니다.

+0

감사합니다. Nick,하지만 데이터베이스에 임시 데이터를 저장하지 않을 것입니다. – khoailang

0

TempData는 막후에서 세션 변수로 구현되므로 세션에 대한 우려는 TempData의 사용으로 확장됩니다.

마법사가 꽤 길고 복잡하다면 아마도 DB를 유지할 것입니다. 그렇지 않은 경우 매우 작고 단순한 경우 모든 단계를 모든 단계에 걸쳐 양식 필드에 저장하고 단계 사이에 모든 데이터를 게시하는 것을 고려할 수 있습니다 . 내가 JonoW에 동의

+0

답장을 보내 주셔서 감사합니다. JonoW – khoailang

0

, 나는 (나를 위해 일했다) 단계 사이의 데이터

+0

감사합니다. Fancisco, 귀하의 조언에 대해 생각하고 있습니다. 예를 들어, 모든 단계에 대한 큰 모델이 있다고 가정 해 보겠습니다. 1 단계에서 사용자는 하나의 입력란 만 입력하면됩니다. 그래서, 하나의 TextboxFox (...) 및 나머지 하나는 HiddenFor (...), 맞습니까? 정말 MVC2의 입력 유효성 검사 기능을 활용하여 부분 유효성 검사 속성을 빌드하는 것이 좋을까요? (http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/) – khoailang

+0

무엇보다도 MVC2의 세션에는 중요한 의미가 있습니다!?!?!? – khoailang

관련 문제