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 アクションでは、子ビューのみの「部分的な」ページしか表示されず、親部分が欠落しているため、見たいものが得られません。RedirectToAction("ParentAction");再び完全なビューが表示されますが、モデルは失われます。ネストされたビューでモデルを返す方法がわからない。それが私が立ち往生しているところです。

4

2 に答える 2

2

まず、 をラップする共通モデルを作成する必要がParentModelありChildModelます。それ以外の場合は、ChildModelを のプロパティとして配置しますParentModel。この場合、子アクションを呼び出して子ビューをレンダリングする代わりに、使用することをお勧めしますHtml.RenderPartial

レンダリングできるParentModelラップChildModelから、ParentView.cshtmlthe 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 に答える