MVC - 如何检查用户名是否已被使用?
问题描述:
我使用数据库优先和我通过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();
}
答
这是你该怎么办检查用户里面寄存器()方法
[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();
}
答
这将查询并返回的分贝的标准匹配的或为空 的第一项
所以我只是检查,如果该查询返回的值或空,并设置一个布尔值(见下面的代码)
注意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
正是我在寻找,谢谢。顺便说一句,有没有什么好的方法来返回“验证信息”? – Nyprez
有很多方法。一种方法是在ViewBag中设置验证消息,在视图中将其分配给可视控件。你可以谷歌样本。 – RajN
嗯,谢谢你的工作:) – Nyprez