2

假设我有一个带有 parentModel 的 parent.cshtml 视图,以及一个带有 childModel 的 child.cshtml 视图。此子操作[ChildActionOnly]在 parent.cshtml: 中呈现并呈现@Html.Action("ChildAction")

现在,在控制器/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
}

在控制器/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);from child action 不会得到我们想要看到的东西,因为它只会给我们一个只有子视图的“部分”页面,缺少父部分。RedirectToAction("ParentAction");将再次给我们完整的视图,但它会丢失模型。不确定如何处理嵌套视图中的返回模型。这就是我卡住的地方。

4

2 回答 2

2

首先,您必须创建一个包含 的通用模型,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);
}
于 2012-06-23T13:20:32.913 回答
0

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

于 2012-06-23T12:07:33.440 回答