2016-09-30 2 views
1

"모범 사례"에 대한 참조가 있지만보기에서 정적 데이터에 액세스 할 때 ViewBag 개체와 Application 개체를 비교하는 것이 더 나은 이유는 무엇입니까?View에서 Application [ "x"] 대신 ViewBag를 사용하는 이유는 무엇입니까?

두 가지 모두 가능합니다. 모든 뷰에 객체를 추가하려고하지만 모델을보기 위해 객체를 전달할 필요는 없다고 가정합니다 (주어진 뷰에 대한 모델이 없기 때문에).

이 작업은 전역 필터와 같이 여러 가지 방법으로 수행 할 수 있지만 응용 프로그램 변수에 액세스하는 것이 훨씬 편리합니다.

답변

1

두 가지 모두 MVC의 약자를 우회하는 불쾌한 해결 방법입니다.

Model-View-Controller 패턴에서 컨트롤러는 View를 채우는 데 필요한 모든 값을 포함하는 Model을 준비하고 View는 의도 한대로 Model 속성을 차례로 표시합니다.

ViewBag, Session 또는 Application 변수와 같은 패턴을 우회하는 데 사용되는 방법은 MVC 방식을 무용지물로 만드는 패턴입니다 (보기에서 직접 변수에 액세스하는 경우).

도 참조하십시오. Pass data to layout that are common to all pagesCreate ViewModel for Navigation : 모든 페이지에 특정 값이 필요한 경우 기본 뷰 모델 또는 부분 뷰를 사용하는 것이 좋습니다.

예,이 토론은 실용 주의자/순수 주의자에게 국한됩니다. 예를 들어, 모든 사용자에 대해 동일하지만 데이터베이스에서로드 된 메뉴가있는 경우 AppDomain 당 한 번로드하기위한 캐싱을 위해 Application 변수에 저장하고 저장하십시오. 그런 다음 기본 ViewModel 또는 Partial을 사용하여 해당 메뉴를 렌더링하십시오.

1

데이터를 뷰 백에 넣는 것이 가장 좋습니다. 뷰 모델을 사용하는 것이 가장 좋습니다.

은 모든보기에 객체를 추가하지만 반드시 (심지어 주어진 뷰의 모델이 없을 수도 있기 때문에)이 모델을 볼 수 를 통과하지한다고 가정.

뷰 모델을 정의하지 않은 경우에도 개념적으로보기에 데이터를 전달하는 모델이 있습니다.

데이터가 모든보기에있는 경우 Why do we use ViewModels?, 당신은 모든 모델은 그 보편적 인 데이터를 포함 상속 기본 뷰 모델을 만들 수 있습니다 참조하십시오.

각 페이지에 적용되는 자체 뷰 모델로 부분 뷰를 만들 수도 있습니다.

0

응용 프로그램에 많은 개체 및/또는 큰 개체를 저장하면 메모리가 부족할 위험이 있습니다.

개체를 응용 프로그램 컬렉션에 넣을 때는 응용 프로그램의 전체 수명 동안 살아 있어야하며 단일 페이지 나 세션에서만 사용되지 않아야한다는 것을 알고 있어야합니다. (비활성 상태이거나 구성된 간격 후에 응용 프로그램이 종료 될 수 있음을 알고 있어야합니다.)

응용 프로그램에 많은 개체를 넣거나 제거하고 코드의 여러 위치에서 수행하면 논리는 따르기가 쉽지 않습니다.

0

일반적으로 응용 프로그램의 비즈니스 개념이나 기능 개념을 고려하여 ViewModels를 디자인합니다. 예를 들어 인보이스를 표시하는 경우보기 모델에는 특정보기에 표시해야하는 송장과 관련된 모든 속성이 포함되어야합니다. 이 목적을 위해 ViewBags/ViewData를 사용하지 않을 것입니다.

ViewBag에서 나는 일반적으로보기의 일부를 보이거나 숨기거나 다른 "비즈니스와 관련이없는"속성에 대한 부울과 같은 다른 "보다 보조적인"속성을 넣습니다.

물론 어떤 사람들은 이것에 동의 할 수없고 모든 것을 Viewmodels에 올려 놓을 것입니다. 이것은 처음부터 취해야 할 결정이므로 애플리케이션 전반에서 일관되게 디자인 할 수 있습니다.

관련 문제