2012-06-28 4 views
2

MVC3의 새로운 기능입니다. 내가 강력하게 형식화 된 뷰를 작성할 때 뷰 코드 파일MVC3보다 강력하게 형식화 된 모델 클래스

@model MonoPoly.Models.LandDocument 

에 상단에이 코드를 사용은 그래서보기가 모델 클래스 (여기 LandDocument 모델 클래스)에서 모든 속성을 사용할 수 있다는 것을 의미한다. 하지만 내 질문에 어떻게 더 많은 모델 클래스를 강력하게이 단일보기 파일에 대한 형식으로? 또는이 뷰에서 LandDocument Model 클래스로 이미 강하게 입력 된 다른 모델 클래스 속성을 어떻게 호출해야합니까?

나쁜 영어로 죄송합니다.

+0

가능한 중복 (http://stackoverflow.com/questions/10720756/how-to-edit-multiple-models-in-a-single-razor- [단일 면도기보기에서 여러 모델을 수정하는 방법] 보기) –

답변

4

한 가지 방법은 당신이보기에 참조하고자하는 모든 객체를 포함하는 ViewModel 개체를 만드는 것입니다. 당신이 모두 LandDocument 클래스를 원하는 경우, 예를 들어 Steve Michelotti's blog: Pattern 2 – Dedicated view model that contains the domain model object

의 뷰 모델 패턴을 구현하는 방법의 세부 사항과 Player 클래스를 참조하십시오, 당신은이 같은 ViewModel을 만들 수 있습니다 상기

public class BoardViewModel 
{ 
    public LandDocument LandDocument { get; set; } 
    public Player LandOwner { get; set; } 
} 

다음을 보기 위에 :

@model MonoPoly.ViewModels.BordViewModel 

당신은 예를 들어, 다음과 같이하여 뷰의 데이터에 액세스 할 :

,
@Model.LandDocument.LandDocumentId 
+0

HUMM ... 그 모든 모델 클래스 속성을 다른 어머니 뷰 모델 전화를 걸 확인 될 것입니다 ? – zxprince

+0

예, 이것은 매우 일반적인 패턴이며 많은 시나리오에서 잘 작동합니다. 규모가 크고 복잡한보기의 경우 게시물에 설명 된 "패턴 3"을 사용하는 것이 더 좋을 수 있지만 그 선택은 주로 상황에 따라 다릅니다. –

+0

정말 고마워요 :) – zxprince

0

당신이 필요로하는 모든 개체를 캡슐화하는 복합 뷰 모델 클래스를 만듭니다.

예 :

public class InvoiceViewModel 
{ 
    public InvoiceHeader Header { get; set; } 
    public List<InvoiceDetail> Details { get; set; } 
} 
+0

나는 당신의 대답을 이해할 수 없다. 제발? – zxprince

+1

필자가 제공 한'InvoiceViewModel' 예제는 여러분이보기로 전달할 예제입니다. 송장 헤더를'Model.Header'로, 송장 상세 정보를'Model.Details'로 참조하십시오. 당신은 등 Model.Header.Name','Model.Header.Address','이러한 내에서 개별 필드를 참조합니다 –

관련 문제