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

后端 未结 3 890
野的像风
野的像风 2021-02-01 05:15

I am new to MVC4. Here I added the ModelState.AddModelError message to display when the delete operation is not possible.

  
    

        
相关标签:
3条回答
  • 2021-02-01 05:27

    RedirectToAction will clear ModelState. You must return a view in order to use this data. Therefore, the first if case won't work. Also, ensure that you have a control in your view (like ValidationSummary) which displays the error... this could be the problem in the second case.

    0 讨论(0)
  • 2021-02-01 05:28

    The RedirectToAction method returns 302 which causes the client to be redirected. Because of this the ModelState is lost as the redirect is a new request. You could however, use the TempData property which allows you to store a temporary piece of data that is unique to the session. You could then check for this TempData on the other controller and add a ModelState error in that method.

    0 讨论(0)
  • 2021-02-01 05:41

    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();
    }
    
    0 讨论(0)
提交回复
热议问题