Asp.Net MVC如何存储可以处理多个请求(线程)的全局信息

时间:2017-11-02 00:06:32

标签: c# asp.net asp.net-mvc asp.net-mvc-5 global-variables

如果我的问题描述性不够,我道歉。我有一个MVC应用程序,有多个公司帐户。所以我有公司用户,我有客户用户。客户用户决定他们想与哪家公司做生意并登录。他们显然可以先与company1做生意,然后注销并登录与公司2做生意。

我有_Layout.cshtml页面,在其中,我希望能够根据客户用户登录的公司自定义页面。起初,我创建了全局静态变量,但这不起作用,因为在user1登录到company1之后,当user2登录到company2时,它会将显示的信息更改为user1,所以突然他正在查看company2。

在我的布局页面中,我想显示公司名称等等。为了展示我先做了什么,我创建了这个类:

namespace Hylton
{
    public class G
    {
        public static string OrgName
        {
            get;
            set;
        }

        public static int OrgId
        {
            get;
            set;
        }

        public static string OrgEmail
        {
            get;
            set;
        }
    }
}

在我的_Layout.cshtml中我有这样的东西:

<li class="hi-logo">
    <a href="~/" class="m-l-10">
        @G.OrgName
    </a>
</li>

每次都没有在数据库中查找,有没有一种好方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

您要实现的目标是给定用户SessionState。根据您的身份验证机制,您可以将其存储在MVC的实际会话中,例如用户登录后,在控制器中执行:

this.Session["CompanyName"] = "Shoes";

然后你可以在视图渲染中提取它:

public ViewResult Whatever()
{
  var g = new G{OrgName = this.Session["CompanyName"]};
  return this.View(g);
}

另一种选择是将其存储在cookie或身份验证令牌中。

但这个想法是相同的 - 用户登录,他们的浏览器(有时是您的服务器)会保留他们正在使用的这家公司的某些信息。