2012-09-24 13 views
6

Cześć! Mam pytanie dotyczące projektu, nad którym obecnie pracuję. mam ten wiersz kodu:Sesja ASP.NET i LINQ

var query = from user in dwe.UsersTable 
         where user.LoginName.Equals(usernameBox.Text) && user.Password.Equals(pwBox.Text) 
         select user; 

     if (query.Count() == 1) 
     { 
      Session["User"] = usernameBox.Text;      
      Response.Redirect("Edit.aspx"); 
     } 
     else 
     { 
      LabelError.Text = "Error try again"; 
     } 
    } 

W moim „UsersTable” Mam coulmn nazwie „identyfikator użytkownika”. Chcę, aby wysłać "ID użytkownika" jako sesję do przekierowanej strony (Edit.aspx) identyfikator użytkownika musi być równy wynikowi porównania między nazwą użytkownika i hasłem.

Pozdrawiam :-)

+2

[Użyj "Dowolny" zamiast "Count"] (http://blogs.teamb.com/craigstuntz/2010/04/21/38598/) –

+0

Złym zwyczajem jest przechowywanie haseł użytkowników w postaci zwykłego tekstu w Baza danych. Zamiast tego powinieneś rozważyć hashowanie swojego hasła i zapisanie go. –

Odpowiedz

6

wystarczy spisać

var query = (from user in dwe.UsersTable 
         where user.LoginName.Equals(usernameBox.Text) && 
         user.Password.Equals(pwBox.Text) 
         select user).FirstOrDefault(); 

if(query!=null) 
{ 
    Session["User"] = query.UserID; 
    Response.Redirect("Edit.aspx"); 
} 
else 
{ 
    LabelError.Text = "Error try again"; 
} 

Nie trzeba pisać donw kodu masz które wykorzystują metodę hrabiego zamiast tego po prostu skorzystać z FirstOrDefault da łatwo wynik.

+0

Pranay Rana, Działa bardzo dziękuję za szybką odpowiedź i pomoc! Zaoszczędziłeś mi dużo czasu – MishMish

+0

jak zrobić to jako zaakceptowaną odpowiedź? to mój pierwszy raz na stronie:/ – MishMish

+0

dlaczego jest -1 ??? –

3
var query = from user in dwe.UsersTable 
      where user.LoginName.Equals(usernameBox.Text) 
        && user.Password.Equals(pwBox.Text) 
      select user; 

// get user from query 
// If SingleOrDefault is not supported (<4.0) use FirstOrDefault instead. 
// Thanks Tim Schmelter 
var user = query.SingleOrDefault(); 

if (user != null) 
{ 
    Session["UserID"] = user.UserID;     
    Response.Redirect("Edit.aspx"); 
} 
else 
{ 
    LabelError.Text = "Error try again"; 
} 
+0

Zauważ, że 'SingleOrDefault' nie jest obsługiwane w' Linq-To-Entities' 3.5, użyj 'FirstOrDefault', a następnie. –

+0

dzięki alot flem, wypróbowałem zarówno twoją odpowiedź, jak i Paranay i to działa dobrze tutaj! kciuki w górę :-) Pozdrawiam – MishMish