How to add ModelState.AddModelError message when model item is not binded

asp.net, asp.net-mvc, asp.net-mvc-3, asp.net-mvc-4, c#

Solution

The `ModelState` is created at each request so you should use `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();
}

Problem

I am new to MVC4. Here I added the ModelState.AddModelError message to display when the delete operation is not possible. ``` <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 my 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"); } } ``` Here I didnt pass any of the model item in the View to check for the item in Model and I couldnt get the ModelState error message .. Any suggestions

Original source