Scott Gu のブログをフォローしています:こちら
彼のブログでは、クライアント側とサーバー側の検証について語っています。
ユーザー名が既に使用されているかどうかを検証し、これを検証エラー メッセージとしてユーザーに表示するにはどうすればよいですか?
Title
Scott のブログでは、これは一意かどうかを検証することと同じです。
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]
[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]
私の想像力と魔法の杖を使って、他の検証宣言と同じように機能する という新しい宣言を作成したいと思います。
よろしくお願いいたします。