1

我正在开发 MVC-4 应用程序。我在 2 个不同的控制器中有 2 个动作,例如:

家长

Public ActionResult Detail(int id)
{
  var p = parent.GetById(id);
  ViewBag.Child = TempData["Child"];
  return View(p);
}

孩子

Public ActionResult Create(Child child)
{
  if(ModelState.IsValid)
  {
   //code save to db
  }
  TempData["Child"] = child;
  return RedirectToAction("Detail", "Parent", new { id = child.ParentId });
}

我有一个父视图和一个部分子视图。子视图在父视图内呈现(子视图包含一个为父视图创建新子视图的表单)。当用户添加新子时,我们将子数据发送到子控制器的创建操作,成功保存后,我们将用户返回到他/她添加子的同一父级。出于这个原因,我们将用户重定向到父控制器的详细操作。如果发生任何验证错误,我们也会重定向到父控制器的详细操作,但这次我们将子对象保存在 TempData 中以保持模型状态错误。

我的父母详细信息视图是:

.....
......

@if (ViewBag.Child == null)
{
    Html.RenderPartial("_AddChildPartial", new ViewDataDictionary { { "parentId", Model.Id } });
}
else
{
    Html.RenderPartial("_AddChildPartial", ViewBag.Child as xxxx.Models.Child);
}

在这里,我首先检查 viewbag 是否包含子对象,如果是,则将该子对象传递给 _AddChildPartial 视图。显示模型错误和用户填写表单的数据。数据显示成功,但未显示模型错误。

谁能告诉我我在这里做错了什么,为什么模型错误现在显示在 _AddChildPartial View 中?

4

1 回答 1

3
TempData["Child"] = child;

您没有存储完整的模型状态(即验证错误信息)。
您只存储Child对象的 POST 值。

阅读 Kazi Manzur Ra​​shid 的博客文章中的POST REDIRECT GET 模式
它将轻松解决您的问题。

于 2013-04-26T05:56:21.523 回答