I have an action that saves a record by calling my BLL entity’s Save method. The entity takes care of its own internal validation and if a field is required but fails validation because a user didn’t enter a value then the entity throws up an error. I’m catching that error in my action and returning the same view. The problem is the error isn’t showing in my ValidationSummary.
Yes I realize I have view model validation by attibute with MVC but this entity is used elsewhere and must have redundant validation if the UI doesn’t/can’t do it, such as used in a batch service job.
Here is my action:
public ActionResult Edit(EntityModel model) {
if (ModelState.IsValid) {
var entity = new Entity(model.ID, model.Name, model.IsActive);
try {
entity.Save(User.Identity.Name);
return RedirectToAction("List");
}
catch (Exception ex) {
ModelState.AddModelError("", ex.Message);
}
}
return View(model);
}
Here is my View:
@model ELM.Select.Web.Models.EntityModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>DefermentTypeViewModel</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IsActive)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IsActive)
@Html.ValidationMessageFor(model => model.IsActive)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
Why wouldn’t the error I add to modelstate be shown in my validationsummary?
Change your View code:
@Html.ValidationSummary(true)to:
@Html.ValidationSummary(false)As per the MSDN Reference on ValidationSummary(), here is the method definition:
Notice that the
boolparameter, if you set it totrue(like you originally did) you will exclude property errors. Change that tofalseand that should get you what you want.