2014-02-15 71 views
0

嘿傢伙我想驗證用戶名存在於數據庫中。我在檢查數據庫時發現該用戶名是否存在問題。我已經做了一些研究,並沒有找到正確的方法來做到這一點在mvc(新的asp.net和mvc)。如果有人能指出我正確的方向,將不勝感激!驗證一個SQL元素存在於mvc c#

這裏是我的驗證方法:

private bool isValid(string UserName, string Password) 
     { 
      bool isValid = false; 

       var user = db.User.Where(u => u.UserName == UserName); 

       if (user != null) 
       { 
        isValid = true; 
       } 

       return isValid; 
     } 

到目前爲止,它可以讓任何人登錄,即使他們不是在數據庫中。

+1

難道你不想檢查密碼嗎? – Kaf

+0

是的,現在正在使用用戶名,但也需要輸入密碼。一步一個腳印;) – Shawn

+1

FYI Where()永遠不會返回null。 –

回答

2

嘗試

var user = db.User.Where(u => u.UserName == UserName).FirstOrDefault(); 
+0

做工精美,定時器啓動時會標記爲答案。現在只需匹配密碼:)。感謝您的幫助,非常感謝。 – Shawn

+0

只是爲了解釋,沒有'FirstOrDefault',你總是返回一個IEnumerable,有時候是零記錄,有時候是1,但從不爲null。 –

+0

您可能會考慮使用SingleOrDefault而不是FirstorDefault。它聲明瞭db中單個項目的假設(所以它更具可讀性),並檢查重複項(如果有的話將拋出異常),儘管可能會稍慢(它必須遍歷所有項目)。不過,我會建議使用它。 – free4ride

0

您可以使用遠程驗證:

ValidationController:

[OutputCache(Location = OutputCacheLocation.None, NoStore = true)] 
public class ValidationController : ControllerBaseNoAuthorize 
{ 
    public JsonResult IsNameAlreadyInUse([Bind(Prefix = "User.Name")]string Name) 
    { 
     return NameAlreadyInUse(Name); 
    } 

    protected JsonResult NameAlreadyInUse(string name) 
    { 
     vvar user = db.User.FirstOrDefault(u => u.UserName == UserName); 
     if (user == null) 
      return Json(true, JsonRequestBehavior.AllowGet); 
    } 
    } 

型號:

public class ModelRegistrationModel 
{ 
    [Required] 
    public int Id{ get; set; } 

    [Required] 
    [Remote("IsNameAlreadyInUse", "Validation", areaName: "AreaName")] 
    public string Name { get; set; } 
} 
2

比您使用的更簡潔的方法是利用.Any() LINQ方法。這樣,您不需要跟蹤IsValid變量。

private bool isValid(string UserName, string Password) 
    { 
     //returns true if there is any match, false if no match 
     return db.User.Any(u=> u.UserName == UserName); 
    } 

另外,如果你真的想檢索用戶做其他事情的用戶對象,就可以快捷的.Where(),只是在地方where子句中使用.FirstOrDefault()

private bool isValid(string UserName, string Password) 
    { 
     var user = db.User.FirstOrDefault(u=> u.UserName == UserName); 
     //return true if user is not null, false if user is null 
     return user != null 
    }