2014-05-14 2 views
-1

기본적으로 두 개의 화면이 있습니다. 첫 번째 화면은 사용자 이름을 입력으로 사용하여 암호를 생성했습니다. 암호는 30 초 동안 만 유효합니다. 암호가 생성되는 즉시 사용자를 다음 화면으로 리디렉션하고 다른 화면에서이 암호를 사용할 수있게해야합니다. 나는 암호를 가진 사용자 모델 객체를 채우려 고하고 그것을 scecond 뷰로 전달하려고 시도하고 있지만 두 번째 뷰는 데이터를 얻지 못하는 것 같다. 아래의 코드를 찾으십시오ASP.Net MVC - 한보기에서 다른보기로 데이터 전달

 int otpass; 

     bool conversion = Int32.TryParse(Encryption.GetPassword(user), out otpass); 
     if (conversion) 
     { 
      //Save user credentials. 

      userModel.Login = user; 
      userModel.Otp = otpass; 
      string otp1 = otpass.ToString(); 
      userModel.OtpCrtDate = DateTime.Now; 
      ViewData["user"] = userModel.Login; 

      ViewData["password"] = Convert.ToString(otpass) ; 
      ViewData["status"] = "OTP: " + otpass + " remains active just 30 seconds from now."; 

      return View("Access",userModel); 
      //return View("UserLogin", userModel); 
     } 

누군가가 그것에 대해 어떻게 말해 줄 수 있습니까?

+0

작동하지 않는 기능은 무엇입니까? 일부 코드를 게시했지만 작동하지 않는 내용을 표시하거나 설명하지 않습니다. –

+0

"을 생성하고 비밀번호를 생성했습니다."-보기가 그렇게해서는 안됩니다. 보기에는 정보 만 표시되어야합니다. 당신의 컨트롤러는 패스워드를 생성해야하고,'return View ("someViewName", viewModelWithPassword); –

답변

0

가장 좋은 방법은 즐겨 사용하는 저장 장치에 암호를 저장하는 것입니다. Redis 또는 다른 NoSQL 백업과 같은 것이 더 나은 장기이지만 SQL 데이터베이스를 사용할 수 있습니다. 사용자 이름, 암호 및 시간 초과를 나타내는 datetime을 저장할 수 있습니다. 유효성을 검사 할 때 시간 제한이 + 30 초 이상인 레코드를 선택합니다.

다른 대안은 암호를 TempData에 저장하는 것입니다. TempData의 데이터는 다음 요청에만 지속됩니다. 이 워크 플로우는 최소 3 개의 요청 (POST 사용자 이름, 비밀번호 입력 양식, POST 비밀번호)이 필요하므로 워크 플로우를 완료 할 수있을만큼 길게 유지하려면 TempData에서 비밀번호를 검색/재설정해야합니다. 다시 말하지만 이것은 권장 경로가 아닙니다. 더럽고 오류가 발생하기 쉽지만 데이터베이스 피하기를 고집한다면 정말 유일한 방법입니다.

관련 문제