2014-10-17 2 views
1

나는 현재의 솔루션을 검색 한하지만, 다음과 같은 달성하는 방법에 관한 지침이나 사례의 집합을 찾을 수 없습니다 :MVC 5 개 저장 임시 무시 필수 필드를 누락하는 동안

원래의 요구 사항을 필수 항목으로 포함 된 모델 그래서 해당 필드에 특수 효과를 추가했습니다. 평소대로 마지막 순간에 변경 사항이 있으며 사용자가 초안을 저장할 수 있도록 요청하고 있습니다. 이 초안은 필수 입력란없이 양식을 저장할 수 있어야합니다.

이 문제의 모범 사례에 대해 알고 싶습니다.

솔루션은 내가 고려하고 있지만, 나는 그들이 해킹 수 있습니다 동의 (내가 전문가 요구하고 그 이유는) 사용자가 내가 정보를 가지고 필드를 캡처 할 수 있습니다 "초안으로 저장"을 클릭하면

  1. 을 다른 ActionResult에 입력하고 해당 필드에서 기본 유효성 검사를 실행하십시오. 필수 입력란이 누락 될 가능성이 있기 때문에 캡쳐 된 정보를 임시 모델에 저장하려고합니다 (필수 주석이없는 경우). 사용자가 이러한 양식을 편집하기로 결정한 경우 뷰의 필드에 임시로 채울 수 있습니다. 사용자가 "제출"을 클릭 할 때까지 모델
  2. 또 다른 옵션은 필요한 모든 주석을 제거하고 클라이언트 측 유효성 검사를 실행하는 것입니다.하지만 그렇게하는 데 필요한 작업량에 대해 궁금해하고 있습니다.

모든 의견은 대단히 감사하겠습니다.

답변

0

두 가지 저장 방법 만 있습니다. 1은 자동 저장에서 호출되며 1은 프로세스를 제출하는 데 사용됩니다. 자동 저장 방법 에서 확인하지 않음if(ModelState.IsValid).

불완전한 개체를 동일한 테이블에 저장할지 아니면 다른 테이블에 저장 할지를 선택하는 것이 좋습니다. 관계형 세계에서 나는 별개의 테이블을 사용할 것입니다. 비 관계형 세계에서는 단일 개체 컬렉션을 사용합니다.

이렇게하면 동일한 원본 모델 세트를 유지할 수 있습니다. 모델 복제에는 비용이 많이 들며, 영장이 가치/사본으로 전달되지만 매핑 비용이 있는지 확인해야합니다. 이 시나리오에서는 ORM의 제약 때문에 다른 객체에 매핑해야하는 경우를 제외하고는 매핑에서 가치가 있다고 생각하지 않습니다.

이러한 부분 형식에는 깊은 가치가 있습니다.이를 서버에 기록하면 분석을 적용하여 사용자가 프로세스를 포기한 이유를 알 수 있습니다. 또한 알림 (알림) 이메일을 보내는 것과 같이 불완전한 양식을 남긴 사용자를 추적 할 수있는 기능을 제공합니다.

1

데이터베이스가 완료 될 때까지 아무 것도 저장하지 않으려합니다. 모든 것이 nullable 인 중복 테이블을 갖는 것은 지옥 같은 단조로운 일입니다. HTML5 이전의 일반적인 경로는 정보를 세션에 저장하는 것이 었습니다. 세션에서 정보를 가져 와서 필드를 다시 채울 수있었습니다.하지만 세션이 비교적 만료되어 유용하게 사용되어야합니다.

감사하게도 HTML5에는 로컬 저장소가 있으므로 실제로이 문제를 처리하는 가장 좋은 방법입니다. 필드의 onchange 이벤트를 감시 한 다음 해당 값을 로컬 저장소에 삽입하면됩니다. 사용자가 양식을 성공적으로 제출하면 로컬 저장 장치 값을 삭제합니다. 그렇지 않으면 페이지가로드되어 필드를 다시 채울 때 해당 값을 로컬 저장소에서 읽으려고합니다.

참조 : http://diveintohtml5.info/storage.html 당신이 IE6 나 IE7에 대해 걱정할 필요하지 않는 한, 당신은 어떤 문제가되지 않도록 매우 폭 넓은 지원이있다

.

+1

나는이 답변에 완전히 동의하지 않으며, 부분 응답 설문 조사는 매우 의미있는 비즈니스 정보입니다. 사용자가 양식을 작성하지 않은 이유를 분석하려면 서버에이 정보가 필요합니다. 항상 포기가 있습니다. 이 정보를 브라우저에 그대로두면 해당 정보가 표시되지 않습니다. –

+0

매력적인 비즈니스 사례가 있다면 아마도 그럴 것입니다. 그러나 OP는 그러한 시나리오를 전달하지 못했습니다. 우리가 알고있는 한, 이것은 관리 포털을위한 것이며,이 경우 포기는 아무런 의미가 없습니다. –

+0

자동 저장은 사용자 경험이 가장 중요한 관심사임을 의미합니다. UX가 걱정된다면 사용자의 행동을 둘러싼 엄청난 비즈니스 가치가 있습니다. 기업은 관리 툴의 UX (관리 도구 판매 사업을하지 않는 한)에 관심을 갖지 않습니다. –

0

다른 옵션 (데이터에 따라 분명히 다름)은 데이터베이스가 아닌 모델을 따르는 것입니다. 이것으로 Model.isValid를 무시하고 프런트 엔드에서 자바 스크립트 유효성 검사를 비활성화하지만 데이터베이스 테이블을 만족 시킨다는 의미입니다. 폼에서는 대부분이 :

  • 텍스트 상자 - 기본적으로 ""또는 ""
  • 체크 박스 - 쉽게 참/거짓 기본
  • 라디오 버튼 - 아마 이미
  • 날짜를 선택 한 - 기본 DateTime.MinValue (또는 DateTimeUTC)
  • 열거에 - 디폴트로 0이 희망

당신은 또한 플래그 지정 단계를 저장하는 (보통은 '지정되지 않은')이 Draft 상태에 있으므로 반포 된 폼을 다시 표시 할 때 설정 한 'null 코드'를 해석해야한다는 것을 알 수 있습니다.

관련 문제