MVC父级和子级嵌套视图返回模型

时间:2012-06-23 11:56:23

标签: asp.net-mvc

假设我有一个带有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");会再次给我们提供全面的视图,但它会失去模型。不确定如何在嵌套视图中处理返回的模型。这就是我被困的地方。

2 个答案:

答案 0 :(得分:1)

首先,您必须创建一个包含ParentModelChildModel的公共模型,否则将ChildModel作为ParentModel的属性。

,而不是调用子操作并呈现子视图,我建议您使用Html.RenderPartial

让我们说ParentModelChildModel包裹起来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)

只是你没有。为什么要在子操作中返回父模型?每个动作都将处理自己的模型