2010-10-28 3 views
0

J'utilise ce code, à partir de l'exemple nerddinner. Cette méthode affiche une liste de tous les dîners à venir dans une base de données lorsqu'elle est appelée dans le contrôleur.Restreindre l'affichage des événements de base de données à l'utilisateur actuellement connecté .Net MVC

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

j'aurais pensé que cela:

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; 
} 

me donnerait juste les dîners qui sont hébergés par l'utilisateur connecté, mais je reçois trois erreurs:

  1. Le délégué 'System.Func' ne prend pas 1 argument

  2. ne peut pas convertir l'expression lambda de type « string », car il est pas un type de délégué

  3. Le nom « utilisateur » n'existe pas dans le contexte actuel

Tous les pointeurs dans la direction serait appréciée :)

le contexte actuel

Répondre

2

User.Identity.Name est seulement disponible dans le contrôleur. Ainsi, vous pouvez passer comme argument à votre méthode:

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; 
} 

Et lorsque vous appelez cette méthode à partir de l'action du contrôleur:

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

Assurez-vous également que l'utilisateur doit être authentifié pour appeler ce contrôleur action ([Authorize] attribut) ou vous pourriez obtenir une exception si un utilisateur anonyme essaie de l'appeler.

+0

Joli un Darin, merci! – 109221793

Questions connexes