【问题标题】:How can I get data which equals a specific user in my MVC?如何在我的 MVC 中获取与特定用户相同的数据?
【发布时间】:2013-12-12 03:30:22
【问题描述】:

我正在尝试根据登录的用户在我的网站上显示来自数据库的不同信息。我刚刚开始使用 MVC(已经完成了一些教程,并且可以通过我在网页上的视图查看信息。)现在我想要过滤登录用户的数据。我在想某处的 where 子句。我正在考虑在这个控制器中上下文从 db 获取数据。

但是怎么做呢?或者这是错误的地方?如果您需要更多信息,请告诉我..

我正在尝试 db.Contacts.ToList().Where(),但我在这里无法访问用户名..

private ApplicationDbContext db = new ApplicationDbContext();

// GET: 
public ActionResult Index()
{
    return View(db.Contacts.ToList());
}

【问题讨论】:

  • 你的表结构是什么样的?

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


【解决方案1】:

您的联系人类是什么样的?大概有一个外键指向联系人所属的用户。比如:

public class Contact
{
    public int ContactId { get; set; }
    public int UserId { get; set; } // the Id of the User the contact belongs to
    public string Name { get; set; }
    public string Phone { get; set; }
}

然后您可以根据该用户 ID 进行过滤:

return View(db.Contacts.Where(c => c.UserId == CurrentUserId).ToList());

您可以通过查看控制器中的User.Identity.Name 属性来获取当前用户ID。假设当用户进行身份验证时,您存储了他们的用户名

public ActionResult Index()
{
    User current = db.Users.Single(u => u.Username == User.Identity.Name);

    return View(db.Contacts.Where(c => c.UserId == current.Id).ToList());
}

为了让事情变得更简单,我将 CurrentUserId 调用放在一个基本控制器中,这样任何操作都可以引用 CurrentUserId 并继续执行。

【讨论】:

  • 我做的基本相同,只是我没有将 CurrentUserId 放在基本控制器中,而是将它放在一个实用程序类中,该类从 Session 中提取(在我们的系统中查找成本很高)或者如果从 session 中丢失则检索.这对我们来说是一种性能提升,可以跨多个控制器重复使用,并使它们更加干净。
  • 我同意,我对缓存当前用户做同样的事情。我喜欢基本控制器上的 CurrentUser 属性,并使用 OnActionExecuting() 从缓存/会话中查找。这样单个操作不需要做任何特殊的事情,他们可以使用 CurrentUser。对于单元测试,它可以让我绕过 Session(因为 OnActionExecuting() 不会触发),只需手动设置 CurrentUser 属性。
  • 谢谢,正是我需要的!
猜你喜欢
  • 2020-07-15
  • 2021-06-26
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 2013-06-09
  • 2014-12-14
相关资源
最近更新 更多