限制查看当前登录用户.Net MVC的数据库事件

时间:2010-10-28 11:20:22

标签: c# asp.net-mvc

我正在使用此代码,来自nerddinner示例。在控制器中调用时,此方法将显示数据库中所有即将到来的晚餐的列表。

public IQueryable<Dinner> FindUpcomingDinners()
{
    return from dinner in entities.Dinners
           where dinner.EventDate > DateTime.Now
           orderby dinner.EventDate
           select dinner;
}

我原以为:

public IQueryable<Dinner> FindUpcomingDinners()
{
    return from dinner in entities.Dinners
           where dinner.EventDate > DateTime.Now && dinner.HostedBy == User.Identity.Name
           orderby dinner.EventDate
           select dinner;
}

会给我一些由当前登录用户托管的晚餐,但是我收到三个错误:

  
      
  1. 委托'System.Func'   不带1个参数

  2.   
  3. 无法将lambda表达式转换为类型'string',因为它不是a   委托类型

  4.   
  5. 当前上下文中不存在“用户”名称

  6.   

任何正确方向的指针都会受到赞赏:)

当前背景

1 个答案:

答案 0 :(得分:2)

User.Identity.Name仅在控制器中可用。所以你可以将它作为参数传递给你的方法:

public IQueryable<Dinner> FindUpcomingDinners(string user)
{
    return from dinner in entities.Dinners
           where dinner.EventDate > DateTime.Now && dinner.HostedBy == user
           orderby dinner.EventDate
           select dinner;
}

从控制器操作中调用此方法时:

var upcomingDinners = dinnerRepository.FindUpcomingDinners(User.Identity.Name);

还要确保需要对用户进行身份验证以调用此控制器操作([Authorize]属性),否则如果匿名用户尝试调用它,您可能会收到异常。