最近、MVC4とEF5を使用する新しいアプリケーションを作成しました。テーブルはすでに存在しているため、最初にデータベースを使用しています。これは私にとってまったく新しいことであり、MVCまたはEFでの初めてのことです。
EMDXファイルにいくつかのモデルがあり、そのうちの1つで、IValidatableObjectを継承し、Validate関数にいくつかのコードを配置しました。これは正常に機能していましたが、ViewModelを使用するようにビューを変更しましたが、validateからエラーが発生し、困惑しました。まだvalidate関数を呼び出していますが、画面にポストバックしなくなり、黄色の画面が表示されます。
エラー:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
モデル:
public partial class Names : IValidatableObject {
public int Id { get; set; }
public string Name { get; set; }
public bool Active { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
// some logic, this works
}
}
ViewModel:
public class NamesVM {
public Names Name { get; set; }
// some other stuff in this model, but not part of this problem
}
コントローラー:編集機能:
[HttpPost]
public ActionResult Edit(NamesVM nvm) {
if (ModelState.IsValid) {
dbCommon.Entry(nvm.Name).State = EntityState.Modified;
dbCommon.SaveChanges();
return RedirectToAction("Index");
}
return View(nvm);
}
意見:
@model NamesVM
<div class="editor-label">
@Html.LabelFor(model => model.Name.Id)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name.Id)
@Html.ValidationMessageFor(model => model.Name.Id)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name.Name)
@Html.ValidationMessageFor(model => model.Name.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name.Active)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name.Active)
@Html.ValidationMessageFor(model => model.Name.Active)
</div>
<input type="submit" value="Save" />
画面上ですべてが正しい場合、コードは正常に機能しますが、検証が失敗すると、適切なエラーが発生せず、黄色の画面が表示されます。私は何かが欠けていると確信しています、私はただ何がわからないのです。