2012-10-17 12 views
20

Jestem nowy w MVC4. Tutaj dodano komunikat ModelState.AddModelError, aby wyświetlić, gdy operacja usuwania nie jest możliwa.
Jak dodać komunikat ModelState.AddModelError, gdy element modelu nie jest powiązany

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


W moim kontroler

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

Tutaj zrobił mijam dowolnego elementu modelu w widoku w celu sprawdzenia pozycji w modelu i nie mogłem się komunikat o błędzie ModelState.
Wszelkie sugestie:

Odpowiedz

29

Na każde żądanie tworzony jest kod ModelState, dlatego powinieneś użyć TempData.

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

Opcja RedirectToAction spowoduje wyczyszczenie modelu ModelState. Aby korzystać z tych danych, musisz zwrócić widok. Dlatego pierwszy przypadek "jeśli" nie zadziała. Upewnij się również, że masz kontrolę w widoku (np. ValidationSummary), która wyświetla błąd ... może to być problem w drugim przypadku.

2

Metoda RedirectToAction zwraca wartość 302, co powoduje przekierowanie klienta. Z tego powodu ModelState jest tracony, ponieważ przekierowanie jest nowym żądaniem. Można jednak użyć właściwości TempData, która umożliwia przechowywanie tymczasowego fragmentu danych, który jest unikalny dla sesji. Następnie można sprawdzić dla tego TempData na innym kontrolerze i dodać błąd ModelState w tej metodzie.

Powiązane problemy