2011-10-24 3 views
1

저는 ASP.NET MVC를 처음 사용하고 있으며 동적으로 채워야하는 콤보 상자가있는 부분 뷰가 있습니다.부분보기의 목록 데이터 채우기

필자는 목록 데이터를보기 용으로 ViewBag에 넣을 수 있으며 내 부분보기에서 사용할 수 있다는 것을 이해합니다.

그러나 몇 가지 다른 페이지에서 부분보기를 사용할 수 있기를 원합니다. 부분 뷰를 사용하는 모든 페이지가 ViewBag에 목록 데이터를 채워야합니까? 내 부분보기 내에서 이것을 캡슐화 할 수있는 방법이 있습니까?

답변

1

봐 사용하여 부분보기에서 액세스해야합니다 ViewModel Best Practices를. 목록 데이터가 포함 된 기본 뷰 모델을 만들어야하고 (필요한 경우) 다른 뷰 모델을 상속해야 할 수도 있습니다. 예를 들어

:

class ViewModelWithFooList 
    { 
     public List<Foo> FooList 
     { 
      get { return new List<Foo>() { new Foo("one"), new Foo("two"), new Foo("three") }; } 
     } 
    } 

필요하면 당신은 ViewModelWithFooList에서 다른 뷰 모델을 상속 할 수 있습니다. 컨트롤러에서

:

public ActionResult GetList() 
    { 
     return View(new ViewModelWithFooList()); 
    } 

그리고 귀하의 의견에 :

@Html.RenderPartial("FooList", Model.FooList); 

뷰 및 부분보기 "FooList은"강력하게 입력해야합니다.

+0

나는 그것을 사용한 적이 없지만 [this] (http://msdn.microsoft.com/en-us/library/system.web.mvc.html.childactionextensions.renderaction.aspx)를 사용해보십시오. –

1

당신은

@Html.Partial("", yourData) 

를 사용하여 부분보기에 데이터를 전달하고이 질문에

@ViewData.Model 
+0

하지만 어디에서이 작업을 수행합니까? 부분보기를 사용하는 모든 페이지에서? –

+0

예. 물론 ViewData.Model이 null 인 경우 "기본값"을 정의 할 수 있습니다. 그러나, 내 대답을 사용하여 올바른 방법입니다. – dknaack

+0

감사합니다. 이것은 항목 목록이며 기본값이 없을 수 있습니다. 그러나 부분 뷰 내에서이 논리를 캡슐화 할 수 없다는 사실에 어려움을 겪고 있습니다. 12 개의보기에서 사용하면 코드를 추가하여 12 개 장소에 목록을 제공해야합니다. –

1

이 작업에는 하위 작업을 사용할 수 있습니다.

ViewBag 만 설정하고 콤보 상자 부분보기를 반환하는 컨트롤러에서 작업을 수행하십시오.

[ChildActionOnly] 
public ActionResult MyDropDown() 
{ 
    ViewBag.DropDown = blah; 
    return PartialView(); 
} 

그런 다음 해당 드롭 다운 목록을 사용해야하는보기는 하위 작업으로 렌더링합니다.

@{ Html.RenderAction("MyDropDown", "MyController"); }