2014-01-07 2 views
1

그래서 내 생각이MVC 디스플레이 속성은

@model ApplicationName.Models.A 

처럼 떨어져 시작하고 내가 사용한다면 소위에서 내 데이터베이스 요소에 소요 @ Html.DisplayFor (모델 => model.Whatever) 내보기에서 데이터베이스 요소를 표시합니다.

그러나이 동일한 페이지 /보기에도 표시하려는 다른 특성이 있습니다. 그러나

그래서 내가 끝낼 필요가 Models.B

에이

@ Html.DisplayFor (모델 => model.WhateverFromB) 모두 크게 감사합니다 도움이

답변

0

당신은 사용해야합니다 이에 대해서는 ViewModel입니다. 보기에 하나 이상의 모델이 필요할 때 좋은 방법입니다. ViewModel 클래스에서 사용중인 모델에서 필요한 것을 포함하고 모델 대신 뷰에서 참조하십시오.

는 작동 ViewModels http://www.asp.net/mvc/tutorials/mvc-music-store/mvc-music-store-part-3

ViewBagsViewData으로 가야하지만 각을 사용하는 적절한 시간이있다. http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

4

당신은 AB 모두를 캡슐화하는 뷰 모델을 사용한다. 예 :

class MyViewModel 
{ 
    public ApplicationName.Models.A A {get; set;} 
    public ApplicationName.Models.B B {get; set;} 
} 

그런 다음이 단일 뷰 모델을 컨트롤러에 전달합니다. 당신은 다음의 과정처럼 속성에 액세스 것입니다 : 당신이 AB, 또는 두 개의 데이터베이스 객체 사이의 의미 적 차이에서 모든 속성을 필요로하지 않는 경우 마찬가지로

@Html.DisplayFor(m => m.A.Whatever) 
@Html.DisplayFor(m => m.B.WhateverFromB) 

당신은,보기에 중요하지 않다 다음을 대신 수행하는 것이 좋습니다.

class MyViewModel 
{ 
    public object Whatever {get; set;} 
    public object WhateverFromB {get; set;} 
} 

뷰 모델의 개별 특성을 채우고 그에 따라 사용하십시오. 물론 AWhateverFromB을 포함하여 두 가지를 조합하여 사용할 수 있습니다.

+0

한 피를 다음

ViewBag.WhateverFromB = b_obj; 

물품. 사용자에게 /로부터 데이터를 표시/수신하려면 특정 ViewModel을 사용하여 필요한 데이터를 도메인 객체로 변환해야합니다. – Xenolightning

0

현실적으로 필요한 모든 속성이 포함 된 ViewModel을 만들고 여러 모델에서 해당 ViewModel을 채울 수 있습니다. 그런 다음 MVC 페이지에서 ViewModel을 '모델'로 사용하십시오.

그러나 질문에 답변하십시오. 그냥보기에 컨트롤러에 추가 Html.Display 항목을 귀하의 의견에 도메인 개체를 사용하여

@Html.Display(ViewBag.WhateverFromB)