假设我有一个带有parentModel的parent.cshtml视图和一个带有childModel的child.cshtml视图。
此子操作为[ChildActionOnly]
,并在parent.cshtml中呈现:@Html.Action("ChildAction")
。
现在,在controller / ParentAction中
public ActionResult ParentAction() {return View();}
[HttpPost]
public ActionResult ParentAction(ParentModel parentmodel) {
if(!ModelState.IsValid) {
...
ModelState.AddModelError("", "parent view has an error");
}
return View(parentmodel); // pass the ball back to user
}
在controller / ChildAction中
[ChildActionOnly]
public ActionResult ChildAction() {return View();}
[HttpPost]
public ActionResult ChildAction(ChildModel childmodel) {
if(!ModelState.IsValid) {
...
ModelState.AddModelError("", "child view has an error");
}
//??? return ParentView(parentmodel, childmodel) ??? how do i do this???
}
在子动作中,如何返回ParentView(也呈现ChildView),并在模型中保留数据?
编辑:-----
我的观点是如何不这样做。来自子操作的return View(childmodel);
将无法获得我们想要看到的内容,因为它只会给我们一个仅包含子视图的“部分”页面,父项部分缺失。 RedirectToAction("ParentAction");
会再次给我们提供全面的视图,但它会失去模型。不确定如何在嵌套视图中处理返回的模型。这就是我被困的地方。
答案 0 :(得分:1)
首先,您必须创建一个包含ParentModel
和ChildModel
的公共模型,否则将ChildModel
作为ParentModel
的属性。
Html.RenderPartial
。
让我们说ParentModel
将ChildModel
包裹起来ParentView.cshtml
,然后再展示the ChildView.cshtml
,
@Html.Partial("ChildView", Model.ChildModel);
现在,从子邮件操作开始,您必须构建ParentModel
并返回ParentView
。
[HttpPost]
public ActionResult ChildAction(ChildModel childmodel) {
if(!ModelState.IsValid)
{
...
ModelState.AddModelError("", "child view has an error");
}
ParentModel model = .. build the model from querying database.
return View("ParentView", model);
}
答案 1 :(得分:0)
只是你没有。为什么要在子操作中返回父模型?每个动作都将处理自己的模型