문제

ASP.NET에 응용 프로그램을 작성했는데 사용자가 데이터베이스에 레코드를 추가 할 수 있도록 설계되었습니다. 페이지는 사용자가 레코드를 추가 할 때 새로 추가 된 레코드의 ID 번호가 세션에서 설정되고 페이지 응답을 설정하는 것으로 설정되어 있습니다. "제출해 주셔서 감사합니다"페이지로 표시 한 다음 원본 페이지로 다시 리디렉션하여 허용합니다. 추가 편집. 사용자는이 화면의 뒤로 버튼을 사용하여 원래 레코드 추가 페이지로 돌아가 데이터를 편집 할 수 있습니다.

그러나 사용자가 다른 탭이나 Windows에서 두 개의 문서를 만들려고 할 수 있기 때문에 ID를 세션에 저장하는 것이 매우 좋은 솔루션이 아니라는 것을 알았습니다. 또한 문자 그대로 컨트롤로 ID를 설정하려고 시도했지만 사용자가 뒤로 버튼을 사용하면 문자 그럴 컨트롤이 ID로 설정되지 않고 편집되지 않고 새 레코드가 추가되는 문제가 발생합니다.

이것에 대한 어떤 종류의 해결책이 있습니까?

도움이 되었습니까?

해결책

바보 같은 질문, 사용자가 백 버튼을 사용하여 게시물에 방금 허용되는 데이터를 편집 할 수 있습니까?

이전에 게시 된 편집이 일반적인 시나리오 인 경우 데이터를 수락 할 때 페이지로 리디렉션하지 않아 편집 할 수 있습니다. 그런 다음 뒤로 버튼을 누르면 원래 "Clean"삽입/새 데이터 페이지로 돌아갑니다.

이것은 다음 흐름에 추가-> [post]-> edit-> ..... add-> [post]-> edit-> [뒤로 버튼]-> add-> [post]-> edit->를 제공합니다. [게시]-> 편집 ....

다른 팁

QueryString에 ID를 저장하는 것이 좋습니다. 레코드가 추가 된 후 "감사합니다"페이지로 리디렉션 한 다음 쿼리 스트링에서 ID와 함께 생성 할 편집 양식에 대한 링크가 포함되어 있습니다. 해당 링크를 준수하면 편집 페이지 Shouild가 쿼리 문자열에서 ID를 가져와 올바른 레코드를로드하여 편집 할 수 있습니다.

QueryString에 ID가 제공되면 추가 및 편집 양식이 동일한 페이지 일 수 있습니다. 양식은 해당 레코드를 편집하는 것을 알고 있습니다. 그렇지 않으면 양식이 새 레코드를 추가합니다.

QueryString에 ID를 추가 해 보셨습니까? 그런 다음 읽고 필요에 따라 세션에 추가 할 수 있습니다 (백 버튼을 클릭하는 사용자의 경우).

뒤로 버튼을 사용할 때 렌더링 된 페이지에서 객체를 편집 할 수있는 많은 문제처럼 보입니다. 대신 편집 버튼을 제공하기에는 너무 많은가요?

컨트롤은 viewstate에서 상태를 저장합니다. ViewState 대신 SessionState를 사용하여 정보를 저장하기로 선택한 경우 컨트롤은 세션 상태에 상태를 저장하고 여러 탭에서 제대로 작동하지 않습니다.

아직 SessionState를 사용 하면서이 문제를 우회하는 방법을 아직 찾지 못했습니다. 우리의 해결책은 일반 뷰 스테이트를 사용하는 것이 었습니다.

QueryString에 ID를 저장하려고 시도했지만 (대부분 편집에 적합) 문제는 정보가 백 버튼을 사용할 때 세션에 저장 될 때입니다. 사용자가 다음을 수행하는 경우 :

  1. 사용자는 레코드 (1st 레코드)를 생성하고 ID는 쿼리 스트링에 전달되며 세션에 일시적으로 저장됩니다.
  2. 사용자는 다른 레코드 (2 차 레코드)를 생성하며 ID는 쿼리 스트링에 전달되어 세션에 일시적으로 저장됩니다.
  3. 사용자는 첫 번째 레코드의 뒤로 버튼을 사용하여 쿼리 스트링이없는 페이지로 이동합니다.

아마도 광범위한 시나리오이지만 일어날 수있는 시나리오입니다. 내가 가진 유일한 솔루션은 javaScript의 window.history.forward ()를 사용하여 백 버튼의 사용법을 차단하여 추가 페이지로 돌아가는 것입니다. 그러나 이것은 해결책으로서 끔찍합니다.

당신을위한 내 질문은 왜 세션에 무엇이든 저장하는 이유는 무엇입니까? 세션에 아무것도 저장하는 것을 피할 수 있다면, 나는 당신이 완전히 더 나아질 것이라고 생각합니다.

이것에 대해 생각하면 다음과 같은 소리가 위에서 설명한 문제에 대한 괜찮은 해결책처럼 들리나요?

  • 레코드를 처음 추가 할 때, 추가 페이지에 숨겨진 필드에 액세스 할 때의 타임 스탬프를 저장하십시오.
  • 이 타임 스탬프는 사용자가 저장을 클릭하면 세션을 통과합니다. ID와 함께.
  • 사용자가 동시에 다른 탭을 열고 저장하면 새 페이지의 타임 스탬프가 세션을 통과합니다.
  • 사용자가 첫 번째 레코드의 추가 페이지 (뒤로 버튼 사용)에 액세스하려고하는 경우 시스템은 세션을 조회하고 타임 스탬프가 있는지 확인하고 해당 페이지의 숨겨진 필드에 있는지 여부를 확인합니다.
  • 일치하지 않으면 사용자는 프롬프트를 얻고 레코드를 올바르게 편집하라고 지시합니다.

이것은 합리적이거나 지나치게 복잡하게 들리나요?

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