2016-10-04 2 views
0

Ich habe eine Tabelle für Nachrichten und eine andere Tabelle für Nachrichtenansichten. Ich möchte ungelesene Nachrichten einem einzelnen Benutzer anzeigen. Mit meiner Nachrichtentabelle habe ich ein neues Feld gesendet, das sieht, ob Nachrichtenansichten für die aktuelle Nachricht existieren. Wenn sie das tun, dann sollte mein Angesehenes bool true zurückgeben, sonst falsch (wenn sie die Nachricht nicht gesehen haben). Alles funktioniert gut, außer dass ich den aktuell angemeldeten Benutzer mit User.Identity.GetUser() nicht wie gewohnt finden kann. Ich habe die richtigen Anwendungen hinzugefügt. Gibt es Einschränkungen in einem Modell, um diese Art von Anrufen einzuschränken? Wenn ja, wie kann ich den aktuellen Benutzer innerhalb eines Modells finden?So finden Sie den aktuellen Benutzer innerhalb des Modells in asp.net mvc

public bool Viewed 
    { 
     get 
     { 
      ApplicationDbContext db = new ApplicationDbContext(); 
      //var _userId = User.Identity.GetUserId(); 
      var _userId = Thread.CurrentPrincipal.Identity.GetUserId(); 
      List<MessageView> m_List = db.MessageView.Where(u => u.UserId == _userId && u.MessageId == O_MessageId).ToList(); 
      var count = m_List.Count(); 
      if (count >= 1) 
      { 
       return true; 
      } 
      else 
      { 
       return false; 
      } 

     } 
    } 

Entschlossen: Außerhalb eines Controllers Sie den aktuellen Benutzer mit diesem finden können -

var _userId = System.Web.HttpContext.Current.User.Identity.GetUserId();

+1

Verwenden Sie Async-Methoden? Können Sie etwas von Ihrem Code zeigen, um zu sehen, ob wir Ihnen besser helfen können? –

+0

Versuchen Sie mit 'Thread.CurrentPrincipal.Identity.GetUserId()' – GauravKP

+0

Ich bekomme den Fehler, Thread existiert nicht im aktuellen Kontext. Ich habe meinen Check oben hinzugefügt. – DudeThatCodes

Antwort

0

Außerhalb eines Controllers können Sie den aktuellen Benutzer mit diesem finden: var _userId = System.Web.HttpContext.Current.User.Identity.GetUserId();

+0

Vergessen Sie nicht, Microsoft.AspNet.Identity zu verwenden; – Kyle

Verwandte Themen