2011-01-16 10 views
9

Sto avendo il seguente codice, tuttavia gli errori non sono visualizzati. Che c'è ?Errore di modello

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

risposta

13

Sembra che si sta impostando l'errore ModelState, poi reindirizzamento a un'altra azione. Sono abbastanza sicuro che ModelState si perda quando lo fai.

In genere, si era appena rendering della vista RateGroup direttamente dall'azione DeleteRateGroup, senza il reindirizzamento, passando nel modello, se necessario, in questo modo:

return View("RateGroup", model); 

Se si desidera che il ModelState a venire insieme a la seconda azione con voi, date un'occhiata a ModelStateToTempDataAttribute di MvcContrib. Ecco la descrizione del dell'attributo, dai commenti del codice sorgente MvcContrib:

Quando un RedirectToRouteResult viene restituito da un'azione, qualsiasi cosa nel dizionario ViewData.ModelState saranno copiati in TempData. Quando viene restituito un oggetto ViewResultBase da un'azione, qualsiasi voce ModelState precedentemente copiata in TempData verrà copiata nel dizionario ModelState.

Problemi correlati