2015-06-30 34 views
0

您好,我想在動作方法中保存一個臨時代碼,例如「代碼」,並在另一個動作方法中使用它來比較model.code是否輸入查看文本是「代碼」。但我不想把它保存到數據庫如何在動作結果中保存臨時值對象並在另一個動作結果中使用

這是我第一次的ActionResult方法,將持有的價值

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> PhoneReset(ForgotPasswordView model, string sms) 
    { 

     if (ModelState.IsValid) 
     { 
      var user = await UserManager.FindByEmailAsync(model.Email); 
      // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 
      // Send an email with this link 
      if (user != null || user.PhoneNumber==model.cellNumber) 
      { 
       //string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 
       //var forgot = new ForgotPasswordBusiness(); 

       GenerateCodeBusiness gen = new GenerateCodeBusiness(); 

       var codes = gen.CreateRandomPassword(8); 
       SendSmsBusiness objap = new SendSmsBusiness(); 
       sms = "Your password reset code is " + codes; 
       objap.Send_SMS(model.cellNumber, sms); 
       await SignInAsync(user, isPersistent: false); 
       return RedirectToAction("ResetViaPhone", "Account"); 
      } 
      else if (user == null) 
      { 
       ModelState.AddModelError("", "The user does not exist"); 
       return View(); 
      } 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

這是第二次的ActionResult

 [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model) 
    { 


     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 
     var user = await UserManager.FindByNameAsync(model.Email); 
     if (user == null) 
     { 
      ModelState.AddModelError("", "No user found."); 
      return View(); 
     } 
     IdentityResult result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); 
     if (result.Succeeded) 
     { 
      return RedirectToAction("ResetPasswordConfirmation", "Account"); 
     } 
     AddErrors(result); 
     return View(); 
    } 

這是輸入代碼的resetPassword視圖。

@model Template.Model.ResetPasswordViewModel 
@{ 
ViewBag.Title = "Reset password"; 
} 

<h2>@ViewBag.Title.</h2> 

@using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
@Html.AntiForgeryToken() 
<h4>Reset your password.</h4> 
<hr /> 
@Html.ValidationSummary("", new { @class = "text-danger" }) 
@Html.HiddenFor(model => model.Code) 




<div class="form-group"> 
    @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 
    <div class="col-md-10"> 
     @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 
    </div> 
</div> 
<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <input type="submit" class="btn btn-default" value="Reset" /> 
    </div> 
</div> 

}

這是resetpassword模型

public class ResetPasswordViewModel 
{ 
    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string Code { get; set; } 

任何援助將有很大的幫助

+2

'我要舉行一個臨時代碼,例如「代碼」在actionmethod,並用它在另一個actionmethod' - 使用'TempData'。例如在第一個動作中 - 'TempData [「Code」] = codes;'。並在第二個動作 - var codes = TempData [「代碼」]作爲CodesType;' – ramiramilu

回答

2

使用的TempData -

//Save values in tempData 
TempData["codes"] = codes; 

//Fetching the values in different action method 
//Note: Cast the tempdata value to its respective type, as they are stored as object 
var codes = TempData["codes"]; 

請注意,該值TempData只有在獲取其值後纔可用。一旦取得該值,它將被清除。

Tempdata中的值存儲爲對象,因此您需要將TemtData值轉換爲其各自的類型。

https://msdn.microsoft.com/en-in/library/dd394711%28v=vs.100%29.aspx

+0

我編輯了我的上面的代碼,並試圖比較這兩個值 – minenhle

+0

@minenhle:謝謝指出鑄造。發佈編輯 – Yogi

相關問題