【问题标题】:mvc duplicate user validation errormvc重复用户验证错误
【发布时间】:2014-11-11 19:53:15
【问题描述】:
我怎样才能创建一个验证,我只能创建一个具有该名称的用户
我的代码
这是
[HttpPost]
public ActionResult Create(Klant klant)
{
ModelState.AddModelError("Firma", "Firma already exists");
if (ModelState.IsValid)
{
db.Klanten.Add(klant);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(klant);
}
现在我可以创建 0 个用户,因为我的 addmodelerror 总是出现错误公司已经存在
【问题讨论】:
标签:
c#
visual-studio-2012
model-view-controller
visual-studio-2013
asp.net-mvc-validation
【解决方案1】:
首先,检查您的模型状态是否有效。如果不是,让用户知道有一些无效字段。
如果有效,请检查该用户名是否已经存在,如果存在,则返回带有您添加的模型错误的模型:
public ActionResult Create(Klant klant)
{
if (ModelState.IsValid)
{
if(db.Klanten.Any(k => k.Username == klant.Username)
ModelState.AddModelError("Firma", "Firma already exists");
else
{
db.Klanten.Add(klant);
db.SaveChanges();
return RedirectToAction("Index");
}
}
return View(klant);
}
这种方法对用户更友好,因为他们可能遇到的最后一个错误是用户名已被占用,他们只需要更改即可。
【解决方案2】:
我知道这个答案很晚,但我很乐意与新观众分享。
而且我知道这种方法与其他答案相同,但我认为它更干净,更易于维护:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Klant klant)
{
if (!ModelState.IsValid)
return View(klant);
if (db.Klanten.Any(k => k.Username == klant.Username)
{
ModelState.AddModelError("Firma", "Firma already exists");
return View(klant);
}
db.Klanten.Add(klant);
db.SaveChanges();
return RedirectToAction("Index");
}
并且不要忘记在Action Method和@Html.AntiForgeryToken()上方添加[ValidateAntiForgeryToken];在表单内的剃刀视图中。以防止黑客攻击。这是一个操作过滤器,除非请求包含有效的防伪令牌,否则对应用了此过滤器的操作发出的请求会被阻止。
您可以在本文中阅读有关防伪令牌的更多信息
https://www.c-sharpcorner.com/blogs/validateantiforgerytoken-attribute-in-asp-net-mvc
【解决方案3】:
放
ModelState.AddModelError("Firma", "Firma already exists");
在“if”之后和return语句之前