2011-01-16 13 views
9

Tengo el siguiente código, sin embargo, los errores no se muestran. Qué está mal ?Mostrando el error del estado del modelo

public ActionResult DeleteRateGroup(int id) 
    { 
     try 
     { 
      RateGroup.Load(id).Delete(); 

      RateGroupListModel list = new RateGroupListModel(); 
      return GetIndexView(list); 
     } 
     catch (Exception e) 
     { 
      RateGroupListModel model = new RateGroupListModel(); 

      if (e.InnerException != null) 
      { 
       if (e.InnerException.Message.Contains("REFERENCE constraint")) 
        ModelState.AddModelError("Error", "The user has related information and cannot be deleted."); 
      } 
      else 
      { 
       ModelState.AddModelError("Error", e.Message); 
      } 
      return RedirectToAction("RateGroup", model); 
     } 
    } 

@model MvcUI.Models.RateGroupListModel 

@{ 
    View.Title = "RateGroup"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Rate Group</h2> 

@Html.ValidationSummary() 

@using (Html.BeginForm()) 

private ActionResult GetIndexView(RateGroupListModel model) 
    { 
     return View("RateGroup", model); 
    } 

    public ActionResult RateGroup(RateGroupListModel model) 
    { 
     return GetIndexView(model); 
    } 

Respuesta

13

Parece que se está configurando el error ModelState, a continuación, volver a dirigir a otra acción. Estoy bastante seguro de que el modelo se pierde cuando haces eso.

Por lo general, usted acaba de renderizar la vista RateGroup directamente de la acción DeleteRateGroup, sin la redirección, pasando en su modelo si es necesario, de esta manera:

return View("RateGroup", model); 

Si desea que el ModelState a venir a la segunda acción con usted, eche un vistazo a ModelStateToTempDataAttribute de MvcContrib. Aquí está la descripción del atributo, a partir de los comentarios del código fuente MvcContrib:

Cuando un RedirectToRouteResult se volvió de una acción, nada en el diccionario ViewData.ModelState se copiará en TempData. Cuando se devuelve una ViewResultBase de una acción, todas las entradas de ModelState que se copiaron previamente a TempData se copiarán de nuevo en el diccionario de ModelState.

Cuestiones relacionadas