如何在MVC 5项目中保留数据

时间:2015-02-18 09:41:00

标签: asp.net-mvc asp.net-mvc-4 session tempdata

我想开发一个MVC 5项目,它可以在调用网站上提供样式,标题,菜单和页脚等相同的外观和感觉。

因此,例如,调用网站将发布标题,菜单和页脚,或用于数据库查找的加密密钥,因此MVC项目可以采用此方法并创建一个看起来像调用网站的视图。

这很好用,我可以使用TempDataTempData.Keep()在所有请求中保留页面样式。

但是,现在我想允许MVC站点上的用户登录/验证,以便他们可以看到一些特权页面。

我遇到的问题是我可以让用户登录,并且仍然使用TempData保留样式。问题出现在用户会话到期时,他们点击,我丢失了样式信息。

目前我有这个控制器和动作来处理登录;

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(User user)
{
    TempData["User"] = null;

    if (ModelState.IsValid)
    {
        if (user.IsValid(user.Email, user.Password, Request.UserHostAddress))
        {
            string userData = user.Email;
            HttpCookie authCookie = FormsAuthentication.GetAuthCookie(user.Email, false);
            FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(authCookie.Value);
            FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);
            authCookie.Value = FormsAuthentication.Encrypt(newTicket);
            Response.Cookies.Add(authCookie);

            TempData.Keep("CmsContent");
            return RedirectToAction("Index", "ManageAccount");
        }
        else
        {
            TempData["User"] = user;
            TempData.Keep("CmsContent");
            return RedirectToAction("Index", "Home");
        }
    }
    else
    {
        user.Message = "Invalid email/password";
        TempData["User"] = user; 
        TempData.Keep("CmsContent");
        return RedirectToAction("Index", "Home");
    }
}

目前使用TempData.Keep("CmsContent")持久保存样式信息,但当会话过期时,它将丢失。

我如何才能最好地处理此类问题。

0 个答案:

没有答案