2016-10-01 39 views
1

我使用数据库优先和我通过ViewModel验证我的输入。但是,我想检查是否已经在db中使用了UserName。我怎么做?这是多远我设法(我可以验证并保存):MVC - 如何检查用户名是否已被使用?

[Required] 
[StringLength(50)] 
[MinLength(3, ErrorMessage = "You must at least have 3 letters")] 
public string UserName { get; set; } 

而下面是在控制我的注册代码:

[HttpGet] 
    public ActionResult Register() { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Register(UserVIewModel reg) { 
     if (ModelState.IsValid) 
     { 
      var m = new User { 
       UserName = reg.UserName, 
       Email = reg.Email, 
       FirstName = reg.FirstName, 
       LastName = reg.LastName, 
       Password = reg.Password 
      }; 

      db.Users.Add(m); 
      db.SaveChanges(); 

      return RedirectToAction("Login"); 

     } 
     return View(); 
    } 

回答

4

这是你该怎么办检查用户里面寄存器()方法

[HttpPost] 
public ActionResult Register(UserVIewModel reg) { 
    if (ModelState.IsValid) 
    { 

     if (db.Users.Where(u => u.UserName == reg.UserName).Any()) 
     { 
      //Do what do u need to do... 
     } 
     else 
     { 
      var m = new User { 
      UserName = reg.UserName, 
      Email = reg.Email, 
      FirstName = reg.FirstName, 
      LastName = reg.LastName, 
      Password = reg.Password 
      }; 

      db.Users.Add(m); 
      db.SaveChanges(); 

      return RedirectToAction("Login"); 
     } 
    } 
    return View(); 
} 
+0

正是我在寻找,谢谢。顺便说一句,有没有什么好的方法来返回“验证信息”? – Nyprez

+0

有很多方法。一种方法是在ViewBag中设置验证消息,在视图中将其分配给可视控件。你可以谷歌样本。 – RajN

+0

嗯,谢谢你的工作:) – Nyprez

1

这将查询并返回的分贝的标准匹配的或为空 的第一项

所以我只是检查,如果该查询返回的值或空,并设置一个布尔值(见下面的代码)

注意x,您可以用另一个字母或单词。也许data => data.UserName....row => row.UserName...result => result.UserName...,它只是代表了DB

像这样的模型(重排的码位为好)

[HttpPost] 
public ActionResult Register(UserVIewModel reg) { 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    // here is the main answer to your question 
    bool userExists = db.Users.FirstOrDefault(x => x.UserName == reg.UserName) != null; 

    // and then use the bool to see if you need to return an error 
    if (userExists) { 
     // I'm not 100% sure about this part so double-check this 
     // but I think it's pretty close to this 
     ModelState.AddModelError("UserName","UserName taken"); 
     return View(model); 
    } 


    // If the userExists = false then code continues here 
    var m = new User { 
     UserName = reg.UserName, 
     Email = reg.Email, 
     FirstName = reg.FirstName, 
     LastName = reg.LastName, 
     Password = reg.Password 
    }; 

    db.Users.Add(m); 
    db.SaveChanges(); 

    return RedirectToAction("Login"); 
} 
+0

'db.Users.Where(u => u.UserName == reg.UserName).Any()'这@raj放在他的回答中比创建bool好,但概念是相同的 – Francisc0