繁体   English   中英

为什么在MVC的局部视图中没有显示模型错误?

[英]Why aren't model errors showing in partial view in MVC?

我正在研究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中?

TempData["Child"] = child;

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM