私はスコット・グーのブログに従っています。hereASP.NET MVC 2:モデル検証 - ユーザー名は既に取得済みですか?
彼のブログでは、彼はクライアントとサーバー側の検証について語ります。
ユーザー名が既に取得されているかどうかを検証し、これを検証エラーメッセージとしてユーザーに表示しますか?スコットのブログで
、これは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
がデータベースサーバーに格納されているため、これはサーバー側の検証になります。それは[Required]
または[StringLength()]
のような宣言部分を使用しないように
私はTitle
が一意であるかどうかを確認する方法を知っているが、私は検証メッセージを作成する方法がわからないがビューに表示されます。例えば、ここで私は、一意性をチェックすることができる方法です。
[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]
と呼ばれる新しい宣言型を作成したいと思います。
ありがとうございました。
組み込みフロントエンド検証応答も使用していますか?もしそうなら(MS oneまたはjQueryのvalidation one?) –
私は宣言のセットである.Net 1を使用しています。彼のブログでは、ScottはSystem.ComponentModel.DataAnnotationsライブラリから来ていると言います。私はこの名前空間を調べ、私が求めていることをする宣言を見つけられませんでした。 – sapbucket