2011-10-12 3 views
24

나는 다음과 혼동한다 : 나는 부모님과 같은 행동을하고있다. 그리고 상응하는 뷰 파일에서 나는 하위 행동을 호출했다. 어린이는 부모와 자식 행동이 모두 같은 컨트롤러에있다. ?하위 동작이 "부모"동작과 동일한 ViewBag를 공유합니까?

나는 아동의 행동과 ViewBag.Now에서 일부 데이터를 공유 할 수있는 부모의 행동이 필요, 나는 무엇을해야 여기 제 질문은 :

나는 부모의 뷰 파일의 하위 액션을 호출, I 다음과 같이 뷰백을 전달하십시오 : @ Html.Action (ViewBag).

public PartialViewResult Child(Object ViewBag) 
{ 
    //using the data in ViewBag 
} 

이것이 올바른 방법인가요? viewbag 객체가 참조로 전달되었거나 원래의 viewbag (더 많은 메모리가 필요함)와 다른 객체입니까?

자식 동작이 기본적으로 호출하는 부모 동작과 함께 뷰백을 공유하는 경우?

하지만 난 정말 아이 액션 무티 - 매개 변수를 전달해야, 내가 무엇을 할 수 @ Html.Action (ViewBag) :

는 대린 디미트로프의 대답에서, 나는 이런 식으로 뭔가를 할 수없는 것을 알고 있었다?

+3

하십시오 상속 클래스 내에 루트 컨트롤러의 ViewBag을 얼마나 이입니다. [so]에서 ​​우리는 그 목적을 위해 태그를 사용합니다. –

+0

하위 작업이 부모와 완전히 분리되지 않은 경우 Html.Partial을 고려하는 것이 좋습니다 – Bochu

답변

31

하위 작업은 상위 작업보다 다른 컨트롤러/모델 /보기 수명주기를 따릅니다. 따라서 ViewData/ViewBag를 공유하지 않습니다. 당신이 부모에서 자식 작용에 매개 변수를 전달하려는 경우, 당신이 할 수 있습니다 :

@Html.Action("Child", new { message = ViewBag.Message }) 

와 자식 행동

:

public ActionResult Child(string message) 
{ 
    ... 
} 
+1

답변 해 주셔서 감사합니다.하지만 하위 작업을 하나 이상의 메시지 (매개 변수)에 전달하려면 어떻게해야합니까? :) – NextStep

+1

예를 들어'new {message = ViewBag.Message, param2 = somethingElse} '와 같이 보낼 수 없습니까? –

+0

미안하지만 ID (int), 메시지 (문자열) 및 객체 (내 사용자 정의 객체)와 같이 자식 작업에 흐르는 것들을 전달해야하므로이 접근법을 사용하는 것에 대해 완전히 생각하는 것이 잘못되었습니다. ? 이제는 자식 작업을 여러 가지 작업을 동시에 수행하는 방법이 있습니다 :) – NextStep

12

는 방법이 있지만, 사용자 정의를 만들어야합니다 면도칼 뷰의 기본 클래스 인 추상 클래스입니다. 그런 다음 부모의 행동에서 자녀의 행동으로 당신이 필요로하는 것을 드러내십시오. 내가 "[.NET MVC3]"와 같은 것들로 귀하의 질문에 접두사하지 않는 WebViewPage

private dynamic GetPageViewBag() 
    { 
     if (Html == null || Html.ViewContext == null) //this means that the page is root or parial view 
     { 
      return ViewBag; 
     } 
     ControllerBase controller = Html.ViewContext.Controller; 

     while (controller.ControllerContext.IsChildAction) //traverse hierachy to get root controller 
     { 
      controller = controller.ControllerContext.ParentActionViewContext.Controller; 
     } 
     return controller.ViewBag; 
    } 
+1

내 하위 작업에서'ViewBag.Variable = ControllerContext .ParentActionViewContext.ViewBag.Variable'입니다. 루프를 돌면서 모든 변수를 복사하는 방법이있을 것입니다.하지만 방금 필요한 변수가 있습니다. 출발점 주셔서 감사합니다. – bradlis7

+0

루프하려는 경우 뷰백을 Dictionary 로 캐스팅 해보세요. – mitsbits

관련 문제