如果我的问题不够描述性,我深表歉意。我有一个MVC应用程序,它有多个公司帐户。所以我有公司用户,也有客户用户。客户用户决定他们想与哪家公司做生意并登录。他们显然可以先与company1做生意,然后注销并登录与company2做生意。
我有_Layout.chtml页面,在其中,我希望能够根据客户用户登录的公司自定义页面。起初,我创建了全局静态变量,但这不起作用,因为在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.chtml中,我有这样的东西:
<li class="hi-logo">
<a href="~/" class="m-l-10">
@G.OrgName
</a>
</li>
有没有一种好的方法可以做到这一点,而不必每次都在数据库中查找?
您试图实现的是为给定用户提供SessionState
。根据您的身份验证机制,您可能能够将其存储在MVC中的实际会话中,例如在用户登录后,在控制器中do:
this.Session["CompanyName"] = "Shoes";
然后你可以在你的视图渲染中提取这个:
public ViewResult Whatever()
{
var g = new G{OrgName = this.Session["CompanyName"]};
return this.View(g);
}
另一种选择是将其存储在cookie或身份验证令牌中。
然而,这个想法是一样的——用户登录,他们的浏览器(有时还有你的服务器)会保存他们合作的公司的某些信息。