如何在ASP MVC的所有视图中保存用户名?

时间:2016-04-30 11:31:10

标签: c# asp.net asp.net-mvc

我正在创建一个简单的聊天应用程序,用户在主页中选择他的名字然后,他可以在聊天页面中发送消息。我不知道如何在不使用模型的情况下记住用户的名字。有帮助吗?

2 个答案:

答案 0 :(得分:3)

您可以将其存储在Session中。在Session["UserName"] = "John Doe";之类的控制器中分配它然后,在视图中,您可以直接访问@Session["UserName"],或通过ViewModel传递它。

答案 1 :(得分:2)

将UserName设置为AuthCookie;

FormsAuthentication.SetAuthCookie(UserName, false);

在Global.asax AuthenticateRequest方法中,您可以创建公共票证字符串变量并解密身份验证Cookie。

FormsAuthenticationTicket ticket;
public static string tempTicket = "";

protected void Application_AuthenticateRequest() {

        HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
        if (authCookie != null)
        {
            ticket = FormsAuthentication.Decrypt(authCookie.Value);
            if (ticket != null)
            {
                tempTicket = ticket.Name;
            }
            else
            {
                tempTicket = "";
            } 
        }

    }

你可以调用Global.asax中定义的tempTicket,你想要的就像这样;

 string globalTicketVariable =  MvcApplication.tempTicket;

更新1 :缺少数据类型,我只是声明了它们。这是一个使用它的示例。

public ActionResult Login(){
            if (globalTicketVariable != null && globalTicketVariable != "")
            {
                    DataContext Context = new DataContext();
                    User TempUser = Context.User.Where(x => x.UserID == (int)globalTicketVariable).FirstOrDefault();
                    if (TempUser != null)
                    {
                        return RedirectToAction("Success", "SuccessPage");
                    }
            }
            return View();
}

希望帮助。