如何添加ModelState.AddModelError消息时模型项目未绑定(How to add

2019-08-01 14:16发布

我是新来MVC4。 在这里,我添加了ModelState.AddModelError消息时显示删除操作是不可能的。

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


在我的控制器

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

在这里我没有通过任何模型中项目的视图,以检查模型中的项目,我不可能得到的ModelState错误信息..
有什么建议

Answer 1:

ModelState在每个请求创建,所以你应该使用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();
}


Answer 2:

RedirectToAction将清除的ModelState。 您必须使用此数据返回一个视图。 因此,第一个“如果”的情况下将无法正常工作。 另外,还要确保你有你的观点(如的ValidationSummary)的控制,显示错误......这可能是在第二种情况下的问题。



Answer 3:

该RedirectToAction方法返回302,其使客户端被重定向。 正因为如此,作为重定向是一个新的请求的ModelState丢失。 但是,您可以使用到TempData属性,它允许你存储临时数据块所特有的会话。 然后,您可以检查该TempData的其他控制器上,并在该方法中添加的ModelState错误。



文章来源: How to add ModelState.AddModelError message when model item is not binded