必須のフィールドなどを指定するのに有効な組み込みモデル検証を使用しますが、モデルでは2つの列の組み合わせが一意であるようにキー制約を指定しました。ASP.NET MVCのキー制約を検証する方法
これを確認するにはどうすればよいですか?ユーザーが重複を追加しようとすると例外がスローされません。
は、ここに私のモデルである:
public class EmailFilter
{
public int ID { get; set; }
[Required]
[StringLength(100)]
[Index("IX_FilterAndEmail", 2, IsUnique = true)]
public string Email { get; set; }
//This is an enum
[Required]
[Index("IX_FilterAndEmail", 1, IsUnique = true)]
public EmailFilterType Filter { get; set; }
}
そして、私のコントローラメソッドを作成します。私はエラーを追加しようとしましたが、私はそれを正しくやっていません。それは例外の発生を停止しますが、それは単にリストビューに戻ります。ここで検証する正しい方法は何か分かりません。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Email,Filter")] EmailFilter emailFilter)
{
if (ModelState.IsValid)
{
if(db.EmailFilters.Any(x => x.Filter == emailFilter.Filter && x.Email == emailFilter.Email))
{
// This doesn't seem to do anything and returns to listview not create view
// "EFValidationSummary" is the id of my validation summary razor control
ModelState.AddModelError("EFValidationSummary", "This filter already exists");
return View(emailFilter);
}
else
{
db.EmailFilters.Add(emailFilter);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(emailFilter);
}
エラーを正しくトリガーし、検証エラーが表示された状態で作成ページに戻すにはどうすればよいですか?
それは 'ModelState.AddModelErrorする必要があります(「」、「このフィルタは、すでに」存在します);' @ Html.ValidationSummary()によって生成された要素に表示するために –
EFエンティティクラスをViewModelとして使用しないでください。 – Dai
@StephenMueckeありがとう!それは働いた – Guerrilla