2013-06-26 4 views
2

나는 asp.net mvc에서 초보자입니다. asp.net mvc4 빈 응용 프로그램을 만들고 엔터티 모델을 추가했습니다. 메뉴 범주, 머리글, 바닥 글 vb를 표시 할 레이아웃 페이지가 있습니다. 그러나 레이아웃 페이지에 하나 이상의 개체 개체 (마지막 게시물, 범주, 태그)가 포함 된 데이터를 보내려면 어떻게해야합니까? 감사합니다Asp.net mvc 면도기 - 기본 레이아웃으로 데이터 보내기

+0

여기에 설명 된 많은 이야기가 있습니다 : http://stackoverflow.com/questions/5207289/asp-net-mvc- 3-layout-viewbag-data-across-all-child-views – frictionlesspulley

답변

11

데이터를 (내가 생각한 데이터베이스에서 가져온) 레이아웃보기로 전달하려는 경우 응용 프로그램의 모든 페이지에 전달되는 데이터가있는 시나리오가 있습니다.

public class BaseController : Controller 
{ 
    public LayoutModel model; 

    public BaseController() 
    { 
     // Here you will use some business logic to populate your Layout Model 
     // You might also consider placing this model into the cache to prevent constant fetching of data from the database on each page request. 
     model = _service.Populate(); 
     ViewBag.LayoutModel = model; 
    } 
} 

을 당신은 내가 당신의 레이아웃을보기 위해 필요한 데이터를 가져 오기 위해 기본 컨트롤러의 생성자를 사용 볼 수 있듯이 : 그래서 내가 할 것입니다 것은 모든 컨트롤러가 상속되는 기본 컨트롤러를 만드는 것입니다. model이라는 속성을 만들고 Populate라는 비즈니스 로직 메서드를 사용했습니다.이 변수는 모델 변수를 채우기 위해 직접 작성해야합니다. 그런 다음 모델을 ViewBag에 배치합니다. 나는이 설정 한 후

는 내가 내 솔루션에서 만드는 모든 컨트롤러는 기본 컨트롤러에서 상속 할 필요가 :

모든 컨트롤러는 이제 기본 컨트롤러에서 모델 속성에 액세스 할 수 있음을 의미
public class HomeController : BaseController 
{ 
    // Controller code here... 
} 

.

는 여기에서 (뷰의 상단에 로컬 변수를 선언하고 기본 유형으로 캐스팅)과 같이 각 뷰에 ViewBag.LayoutModel를 사용할 수 있습니다

@{ 
    LayoutModel MenuModel = ViewBag.LayoutModel; 
} 

을 다음과 같이 사용할 이 :

@MenuModel.SomeProperty 

이것은 단지 하나의 방법 일뿐 아니라 덜 복잡하고 덜 복잡한 방법이 있습니다. 당신은 당신 자신의 연구를 할 필요가 있으며 어떤 기술이 당신에게 가장 잘 맞는지를 알아야합니다 ...

관련 문제