2014-04-21 53 views
1

我似乎无法弄清楚如何在认证用户后返回上一页。我试着返回RedirectToLocal(returnUrl),但总是把用户带回到主页索引页面。当我使用return Redirect(returnUrl)时,它会重新载入前一页。但是,前一页的ViewBag中的对象在该点处为空。我只想让用户返回到上一页,保留状态,将所有输入的数据保留在购物车结账页面上。在认证用户后重定向用户返回上一页

+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

回答

0

你如何将他们重定向到登录页面 - 手动或使用属性?将[Authorize]添加到控制器类是最简单的方法,默认情况下按预期工作。例如

[Authorize] public class TestController : Controller

对于你的情况,你可能要放置在授权上的操作属性,而不是整个控制器

[Authorize] 
public ActionResult ConfirmShoppingCart() 

这种方法的好处是进一步customization

一个可能的最后手段是手动放置一个条件的视图呈现您的“继续”按钮(或任何你想触发认证)。

E.g.

@if (Request.IsAuthenticated) { 
//normal proceed' 

} else { 
    @Html.ActionLink("Proceed", "Login", "Account", new { @returnUrl = Url.Action("ViewCart", "ShoppingCart")}, new { }) 
} 
0

使用后::

[HttpPost] 
     public ActionResult Login(User model, string returnUrl) 
     { 
      // Lets first check if the Model is valid or not 

      if (ModelState.IsValid) 
      { 
       using (DbEntities entities = new DbEntities()) 
       { 
        string username = model.UserID; 
        string password = model.Password; 

        var UserAuth = db.Users.Where(x => x.UserID == model.UserID && x.Password == model.Password).FirstOrDefault(); 

        // Now if our password was enctypted or hashed we would have done the 
        // same operation on the user entered password here, But for now 
        // since the password is in plain text lets just authenticate directly 

        bool userValid = entities.Users.Any(user => user.UserID == username && user.Password == password); 
        var usr = entities.Users.FirstOrDefault(x => x.UserID == username && x.Password == password); 
        if (userValid) 
        { 
         //System.Web.HttpContext.Current.Session["_SessionCompany"] = usr.DefaultCompanyID; 

         FormsAuthentication.SetAuthCookie(username, false); 
         if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
          && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
         { 
          return Redirect(returnUrl); 
         } 
         else 
         { 
          //return RedirectToAction("Index", "Dossier"); 
          return RedirectToAction("Index", "Home"); 
         } 
        } 
        else 
        { 
         ModelState.AddModelError("", "The user name or password provided is incorrect."); 
        } 
       } 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 
+0

当我使用重定向(returnUrl)时,它“重新加载”前一页,用户输入的所有数据都是空白的。我想要做一些事情,比如在javascript中回顾历史。那可能吗? – user2974739

+0

使用断点来检查什么是'returnUrl'值 – Rahul

相关问题