gpt4 book ai didi

validation - ASP.NET MVC 2 : Model Validation - username already taken?

转载 作者:行者123 更新时间:2023-12-04 05:47:03 26 4
gpt4 key购买 nike

我正在关注 Scott Gu 的博客:here

在他的博客中,他谈到了客户端和服务器端验证。

如何验证用户名是否已被占用并将其作为验证错误消息显示给用户?

在 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; }
}

我的第一个猜测是,这是在模型 Controller 中以某种方式完成的,在这里:
    //
// 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是独一无二的,但我不知道如何使验证消息出现在 View 中,就像使用声明式 [Required] 一样或 [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] 的新声明。其表现与其他验证声明类似。

预先感谢您的帮助。

最佳答案

您可以如上所述创建自定义属性并使用 IValidateObject但我更喜欢将我的错误添加到应用程序中某一层的 ModelState 中。

为此,您可以使用 ModelState.AddModelError

如果您使用 ModelState.AddModelError("Title", "Title must be unique");它会给 Title 添加一个错误 field 。

如果您使用 ModelState.AddModelError("*", "Title must be unique");它将为页面添加一般错误消息。

  [HttpPost]
public ActionResult Create(Dinner dinner)
{
if (ModelState.IsValid)
{
if(nerdDinners.Dinners.Any(d => d.Title == dinner.Title))
{
ModelState.AddModelError("Title", "The title is not unique");
return View(dinner);
}

nerdDinners.Dinners.Add(dinner);
nerdDinners.SaveChanges();

return RedirectToAction("Index");
}

return View(dinner);
}

关于validation - ASP.NET MVC 2 : Model Validation - username already taken?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com