2012-10-17 7 views
20

Ich bin neu in MVC4. Hier habe ich die ModelState.AddModelError-Nachricht hinzugefügt, die angezeigt werden soll, wenn der Löschvorgang nicht möglich ist.
Wie ModelState.AddModelError Nachricht hinzufügen, wenn Modellelement nicht verknüpft ist

<td> 
    <a id="aaa" href="@Url.Action("Delete", "Shopping", new { id = Request.QueryString["UserID"], productid = item.ProductID })" style="text-decoration:none"> 
    <img alt="removeitem" style="vertical-align: middle;" height="17px" src="~/Images/remove.png" title="remove" id="imgRemove" /> 
     </a> 
     @Html.ValidationMessage("CustomError") 
    </td> 
    @Html.ValidationSummary(true) 


In meinem Controller

public ActionResult Delete(string id, string productid) 
     {    
      int records = DeleteItem(id,productid); 
      if (records > 0) 
      { 
       ModelState.AddModelError("CustomError", "The item is removed from your cart"); 
       return RedirectToAction("Index1", "Shopping"); 
      } 
      else 
      { 
       ModelState.AddModelError(string.Empty,"The item cannot be removed"); 
       return View("Index1"); 
      } 
     } 

Hier habe ich nicht eine des Modellelementes in der Ansicht übergibt für das Element im Modell zu überprüfen, und ich konnte nicht die Modelfehlermeldung.
Alle Vorschläge

Antwort

29

Die ModelState wird bei jeder Anfrage erstellt, so dass Sie TempData verwenden sollten.

public ActionResult Delete(string id, string productid) 
{    
    int records = DeleteItem(id,productid); 
    if (records > 0) 
    {  
     // since you are redirecting store the error message in TempData 
     TempData["CustomError"] = "The item is removed from your cart"; 
     return RedirectToAction("Index1", "Shopping"); 
    } 
    else 
    { 
     ModelState.AddModelError(string.Empty,"The item cannot be removed"); 
     return View("Index1"); 
    } 
} 

public ActionResult Index1() 
{ 
    // check if TempData contains some error message and if yes add to the model state. 
    if(TempData["CustomError"] != null) 
    { 
     ModelState.AddModelError(string.Empty, TempData["CustomError"].ToString()); 
    } 

    return View(); 
} 
7

RedirectToAction löscht ModelState. Sie müssen eine Ansicht zurückgeben, um diese Daten verwenden zu können. Daher wird der erste "Wenn" -Fall nicht funktionieren. Stellen Sie außerdem sicher, dass Sie ein Steuerelement in Ihrer Ansicht haben (wie ValidationSummary), das den Fehler anzeigt ... dies könnte das Problem im zweiten Fall sein.

2

Die RedirectToAction-Methode gibt 302 zurück, wodurch der Client umgeleitet wird. Aus diesem Grund ist der ModelState verloren, da es sich bei der Weiterleitung um eine neue Anfrage handelt. Sie können jedoch die TempData-Eigenschaft verwenden, mit der Sie temporäre Daten speichern können, die für die Sitzung eindeutig sind. Sie könnten dann nach diesem TempData auf dem anderen Controller suchen und einen ModelState-Fehler in dieser Methode hinzufügen.

Verwandte Themen