MVC个人用户帐户登录值保持不变

时间:2016-03-15 11:11:34

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

我有一个使用ASP.NET身份的MVC网站。此站点可用于多个客户数据,每个客户独立于另一个客户,不应共享任何数据。当选择该客户时,每个交易应仅在该客户数据上发生。

但是,登录的用户可以看到所有客户,他们只需在登录时选择要交易的客户。

因此,登录后,他们将从Dropdown中选择他们的客户,然后查看所有客户项目,个人信息以及可为该客户完成的独特事项。

所以例如

var allItems = from a in db.Items where a.CustomerId = customerId select a;

此客户ID可以在登录时获取,就像用户从下拉菜单中选择的那样。但是,如何在整个用户登录会话中坚持此选择?我显然不想将它保存到数据库中,因为它不是一个永久的选择我希望他们退出时选择消失,他们可以自由选择下次登录的另一个客户。

另一个很酷的事情是能够覆盖DbContext中的get方法,只检索与登录时选择的客户ID匹配的项目

public DbSet<Item> ItemsAll { get; set; }

public IQueryable<Item> Items
{
     get
     {
          return ItemsAll.Where(x => x.Customer == myLoggedInCustomerChoice);
     }
}

2 个答案:

答案 0 :(得分:1)

将值添加到Session变量,并在加载页面时对其进行检查。

答案 1 :(得分:0)

您的选择

  • 将其保留到数据库中。如果您真的不想拥有用户再次选择,那就太好了。这样做的缺点是如果你想在客户端上捕获它,你还需要使用其他选择之一来保存客户端的价值。
  • 坚持使用cookie。不要设置过期时间或将其设置为与身份验证cookie保持一致的过期时间。
  • 将其保留到HTML5本地存储(window.localStorage)。这里的缺点是您需要在使用此信息的服务器中包含任何请求中的任何变量。其他选择不需要这样做。
  • 将其保留在Session对象中并配置Sessions以使用数据库。我不是Session对象的忠实粉丝所以我会把它作为最后的手段。
  • 隐藏字段(输入类型='隐藏') - 与本地存储相同的缺点但是您必须确保此值不会在导航中丢失。所以这适用于SPA,其中一些内容保持静态但对传统的Web应用程序来说并不方便。