我正在关注 Scott Gu 的博客:这里
在他的博客中,他谈到了客户端和服务器端验证。
如何验证用户名是否已被使用并将其作为验证错误消息显示给用户?
在 Scott 的博客中,这与验证是否Title
是唯一的相同:
public class Dinner
{
public int DinnerID { get; set; }
[Required(ErrorMessage = "Please enter a Dinner Title")]
[StringLength(20, ErrorMessage = "Title is too long")]
public string Title { get; set; }
[Required(ErrorMessage = "Please enter the Date of the Dinner")]
public DateTime EventDate { get; set; }
[Required(ErrorMessage = "Please enter the location of the Dinner")]
[StringLength(30, ErrorMessage = "Address is too long")]
public string Address { get; set; }
[Required(ErrorMessage = "Please enter your email address")]
[RegularExpression(".+\\@.+\\..+", ErrorMessage = "Please enter a valid email address")]
public string HostedBy { get; set; }
public virtual ICollection<RSVP> RSVPs { get; set; }
}
我的第一个猜测是,这是在模型控制器中完成的,这里:
//
// POST: /Home/Create
[HttpPost]
public ActionResult Create(Dinner dinner)
{
if (ModelState.IsValid)
{
nerdDinners.Dinners.Add(dinner);
nerdDinners.SaveChanges();
return RedirectToAction("Index");
}
return View(dinner);
}
并且由于Title
存储在数据库服务器中,这将是服务器端验证。
我知道如何检查 是否Title
是唯一的,但我不知道如何使验证消息出现在视图中,就像使用[Required]
or之类的声明一样[StringLength()]
。例如,这是我可以检查唯一性的方法:
[HttpPost]
public ActionResult Create(Dinner dinner)
{
if (ModelState.IsValid)
{
foreach (var existingDinner in nerdDinners.Dinners)
{
if(existingDinner.Title == dinner.Title)
{
**// TODO: display validation error message?**
}
}
nerdDinners.Dinners.Add(dinner);
nerdDinners.SaveChanges();
return RedirectToAction("Index");
}
return View(dinner);
}
使用我的想象力和一根魔杖,我想创建一个名为的新声明[TitleIsUnique]
,其执行方式与其他验证声明一样。
预先感谢您的协助。