2012-06-23 2 views
1

parentModel이있는 parent.cshtml보기와 childModel이있는 child.cshtml보기가 있다고 가정합니다. 이 하위 동작은 [ChildActionOnly]이며 parent.cshtml : @Html.Action("ChildAction")에서 렌더링됩니다.모델을 반환하는 MVC 상위 및 하위 중첩 뷰

이제/ChildAction 나는 (또한 ChildView를 렌더링)에 ParentView으로 돌아가 보존 어떻게 아이의 행동에

[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??? 
} 

, 컨트롤러의 컨트롤러/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 
} 

그들의 모델에있는 데이터?

편집 : -----

내 요점은 그렇게하지 않는 것입니다. 하위 작업의 '부분적'페이지 만 제공하기 때문에 자식 작업의 return View(childmodel);은 우리가보고 싶은 것을 얻지 못합니다. 부모 부분이 누락되었습니다. RedirectToAction("ParentAction");는 전체 화면을 다시 표시하지만 모델을 잃게됩니다. 중첩 된 뷰에서 모델을 반환하는 것을 처리하는 방법을 모릅니다. 그게 내가 붙어있는 곳이야.

+0

parentModel의 하위 항목으로 childModel을 배치 해보십시오. childModel를 자식 컨트롤러로 전달한 다음 부모 컨트롤러 내부에서이를 무시합니다. –

+0

@Aleksey : child.cshtml에는 childModel에 대한 정보를 게시하는 Form과 Submit Button이 있습니다. [HttpPost] public ActionResult ChildAction (ChildModel childmodel) {... 그래서, ParentModel이 ChildModel을 감싸는 방식에 대한 귀하의 요점을 보지 못합니까? 코드 샘플을 보여 주시겠습니까? 또한 아마도 themarcuz가 말한 것처럼 모든 사람들이 자체 모델을 처리합니까? – Tom

답변

1

먼저 처리 할 당신은 ParentModel 및 다른 ChildModelParentModel의 속성으로 ChildModel을 넣어 랩하는 일반적인 모델을 만들어야합니다. 자식 동작을 호출하고 자식 뷰를 렌더링하는 대신이 경우 Html.RenderPartial을 사용하는 것이 좋습니다.

하자가

@Html.Partial("ChildView", Model.ChildModel); 

지금 아이 포스트 행동에서 당신이 ParentModel를 구축하고 ParentView을 반환해야는 ParentModel는 다음 ParentView.cshtml에서 당신에 의해 the ChildView.cshtml를 렌더링 할 수있는 ChildModel를 래핑 말한다.

[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); 
} 
+0

mvc에서 'customControl'을 갖는 것처럼 보이는 것은 asp.net 웹 양식과 같이 단순하지는 않습니다. 이 return view/partialview 구조는 다소 편평하며 dom 객체를 업데이트하는 ajax에서 더 잘 작동합니다. – Tom

1

간단히 말해서 그렇지 않습니다. 아동 행동에서 부모 모델을 반환해야하는 이유는 무엇입니까? 모든 행동은 자신의 모델

+0

나는 우리가 그렇게하지 않는다는 것을 안다. 그러나 나는 그것을 대답으로 받아 들일 수 없다. 내 요점은 그렇게하지 않는 것입니다. 반환보기 (childmodel); 하위 작업이있는 '부분적'페이지 만 제공하기 때문에 하위 작업의 하위 항목이 없어서 부모 부분이 누락되었습니다. RedirectToAction ("ParentAction"); 우리에게 전체적인 시각을 다시 주겠지 만 모델을 잃을 것이다. 중첩 된 뷰에서 모델을 반환하는 것을 처리하는 방법을 모릅니다. 그게 내가 붙어있는 곳이야. – Tom

관련 문제