2011-01-16 8 views
9

Ich habe den folgenden Code, aber die Fehlerursache wird nicht angezeigt. Was ist falsch ?Anzeige von modelstate error

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

Antwort

13

Es ist wie Sie die Model Fehler sind Einstellung sieht, dann zu einer anderen Aktion umleiten. Ich bin ziemlich sicher, dass der ModelState verloren geht, wenn Sie das tun.

Normalerweise würde man einfach nur die Aussicht RateGroup machen direkt aus der DeleteRateGroup Aktion, ohne die Umleitung, in Ihrem Modell vorbei, wenn nötig, wie folgt aus:

return View("RateGroup", model); 

Wenn Sie die Model zusammen zu kommen, um die zweite Aktion mit Ihnen, werfen Sie einen Blick auf MvcContrib ModelStateToTempDataAttribute. Hier ist die Beschreibung des Attributs vom MvcContrib Quellcode Kommentaren:

Wenn ein RedirectToRouteResult aus einer Aktion zurückgegeben wird, irgendetwas im ViewData.ModelState Wörterbuch wird in TempData kopiert werden. Wenn eine ViewResultBase von einer Aktion zurückgegeben wird, werden alle ModelState-Einträge, die zuvor in TempData kopiert wurden, zurück in das ModelState-Dictionary kopiert.

Verwandte Themen