2012-02-09 7 views
8

Tengo una acción que guarda un registro llamando al método Guardar de mi entidad BLL. La entidad se encarga de su propia validación interna y si se requiere un campo pero falla la validación porque un usuario no ingresó un valor, la entidad arroja un error. Capté ese error en mi acción y devuelvo la misma vista. El problema es que el error no se muestra en mi ValidationSummary.Errores del estado del modelo que no se muestran en la vista

Sí Me doy cuenta de que tengo la validación del modelo de vista por attibute con MVC pero esta entidad se usa en otro lugar y debe tener validación redundante si la UI no puede/no puede hacerlo, como en un trabajo de servicio por lotes.

Aquí es mi acción:

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); 
} 

Aquí está mi punto de vista:

@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> 
} 

¿Por qué no el error agrego a ModelState se mostrará en mi ValidationSummary?

Respuesta

19

cambiar la vista de código:

@Html.ValidationSummary(true)

a:

@Html.ValidationSummary(false)

Según the MSDN Reference on ValidationSummary(), aquí es la definición del método:

public static MvcHtmlString ValidationSummary(
    this HtmlHelper htmlHelper, 
    bool excludePropertyErrors 
) 

en cuenta que laEl parámetro, si lo configura en true (como originalmente lo hizo), excluirá los errores de propiedad. Cambie eso al false y eso debería darle lo que quiere.

+1

¡Eso fue todo! ¡Gracias! –

+0

@CDSmith Me alegra ayudar. :) –

+3

Sé que esto es viejo y todo, pero ¿soy el único confundido y realmente no creo que esta sea la respuesta? El parámetro de bool es 'excludePropertyErrors'. El método utilizado para agregar un error es 'ModelState.AddModelError', por lo que agregamos un error ** modelo ** y excluimos ** propiedad ** errores, entonces, ¿cuál es el problema? ¿Por qué mostrar los errores de ** propiedad ** muestra el error ** modelo ** agregado? Es un error en el resumen de validación o un método de modelo de estado mal llamado, ¿verdad? –

Cuestiones relacionadas