2010-04-15 61 views
2

好吧,我試圖將登錄文本框密碼和用戶名與使用linq從數據庫獲取信息的自定義驗證程序進行比較,但它始終返回false,但驗證者可以告訴我在哪裏我的代碼出錯了。這將是非常感謝......感謝你在先進的...將textbox.text值與SQL Server中的值進行比較

protected void LoginValidate(object source, ServerValidateEventArgs args) 
{ 
    TiamoDataContext context = new TiamoDataContext(); 

    var UsernameCheck = from User in context.Users 
         where User.Username == TextBoxLoginUsername.Text && User.Password == TextBoxLogInPassword.Text 
         select User.Username; 

    var PasswordCheck = from User in context.Users 
        where User.Username == TextBoxLoginUsername.Text && User.Password == TextBoxLogInPassword.Text 
        select User.Password; 

    String test1 = PasswordCheck.ToString(); 
    String test2 = UsernameCheck.ToString(); 

    if (test1 == TextBoxLogInPassword.Text && test2 == TextBoxLoginUsername.Text) 
    { 
     args.IsValid = true; 
     Session["Username"] = TextBoxLoginUsername; 
     Response.Redirect("UserProfile.aspx"); 

    } 
    else 
    { 
     args.IsValid = false; 
    } 

} 

我不知道我要去的地方錯了,我知道它很可能是某種愚蠢的錯誤的和我是在這個沒有經驗的...

回答

2

UsernameCheck和PasswordCheck將會是集合,而不是單個值。因此ToString()方法沒有返回你認爲應該的東西。

它可能返回"IEnumerable<string>"

你需要強迫你的LINQ查詢返回一個結果,而不是一個集合。

var user = context.Users.Where(u => u.Username==TextBoxLoginUsername.Text && 
            u.Password == TextBoxLogInPassword.Text) 
       .FirstOrDefault(); 

string userNameCheck = user.Username; 
string passwordCheck = user.Password; 

作爲一個方面說明,這就是爲什麼使用var關鍵字是有點危險的,如果你不絕對肯定你寫的語句返回類型。如果您想將var更改爲string,編譯器將在編譯時捕獲類型不匹配。

+0

謝謝你這個工作就像一個魅力,我有一個錯誤nullpointerexception我剛剛添加了一個if(user!= null){};它的工作......只是一個側面的問題是這是驗證用戶的最佳方式什麼是在asp.net世界的標準 – Anicho 2010-04-15 16:24:33

+1

最好的是使用ASP.NET會員提供商之一(或編寫自己的自定義的)。我會自己提出一個問題......或搜索並確保它不是重複的。作爲新用戶的另一個建議,請務必在獲得正確答案時接受。如果你不這樣做,你的徽章會顯示低的接受率,有些人將來不會回答你的問題。 – 2010-04-15 17:45:35

相關問題