我最近创建了一个使用 MVC4 和 EF5 的新应用程序。表已经存在,所以我们首先使用数据库。这对我来说是全新的,这是我第一次接触 MVC 或 EF。
我的 EMDX 文件中有一些模型,其中一个模型继承了 IValidatableObject 并将一些代码放入 Validate 函数中。这工作正常,然后我将视图更改为使用 ViewModel,现在我从验证中收到错误,我很难过。它仍在调用我的验证功能,但不再将其发布回屏幕,我只是得到一个黄色屏幕。
错误:
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
}
}
视图模型:
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" />
如果屏幕上的一切都正确,则代码可以正常工作,但是当验证失败时,我没有收到一个很好的错误,我得到一个黄色屏幕。我确定我错过了一些东西,我只是不知道是什么。