2014-05-14 107 views
-1

我基本上有两个屏幕。第一个屏幕以用户名作为输入并生成一个密码。密码仅在三十秒内有效。一旦生成密码,我需要将用户重定向到下一个屏幕,并允许他在另一个屏幕上使用该密码。我试图用密码填充用户模型对象,并将其传递到第二视图,但我的第二个视图似乎没有获取数据。请找到下面的代码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

最好的办法是将密码保存在您喜欢的存储机制中。你现在可以使用SQL数据库,尽管像Redis或其他NoSQL支持会更好。您可以存储用户名,密码和表示超时的日期时间。在验证时,您选择超时日期大于或等于现在+ 30秒的记录。

另一种替代方法是将密码存储在TempData中。请记住,TempData中的数据只会持续到下一个请求。它看起来像这个工作流程将需要至少3个请求(POST用户名,GET密码输入表单,POST密码),所以您需要从TempData两次检索/重置密码以保持足够长的时间来完成工作流程。再次,这不是一条推荐路线。它很脏,很容易出错,但如果你坚持要避免数据库,这实际上是你唯一的办法。

相关问题