2016-10-23 3 views
-1

3 가지 카테고리를 나타낼 수있는 모델이 있습니다. 내 견해로는, 관련 분야와 함께 각 카테고리에 대해 3 개의 다른 테이블을 만들고 싶습니다. 나는 이것을 위해 뷰 모델을 사용하여 부분 뷰를 각 카테고리에 사용해야한다고 생각한다.뷰 모델을 부분 뷰로 바인딩

그래서 내 메인 모델은 3 가지 하위 모델 (부동산, 자동 및 서비스)이있는 "광고"입니다. 내 집 컨트롤러에 부동산 동작을 구현하는 방법은 다음과 예 : 다음

public ActionResult Realty() 
    { 
     var ads = db.Ads.Include(a => a.Realty); 
     var vm = new List<RealtyViewModel>(); 

     foreach (var ad in ads) 
     { 
      vm.Add(new RealtyViewModel 
      { 
       Title = ad.Title, 
       Descirpiton = ad.Descirpiton, 
       Type = ad.Realty.Type, 
       NumberOfRooms = ad.Realty.NumberOfRooms 
      }); 
     } 

     return PartialView(vm); 
    } 

내 부분보기는 다음과 같습니다 : 내 색인 페이지에서 다음

@model IEnumerable<OGAS.Areas.Category.ViewModels.RealtyViewModel> 

<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Title) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Type) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Descirpiton) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.NumberOfRooms) 
     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Title) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Type) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Descirpiton) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.NumberOfRooms) 
      </td> 
     </tr> 
    } 

</table> 

(어떤 모델을 사용하지 않고), I

@{Html.RenderPartial("Realty");} 

을하지만 나는 다음과 같은 오류 받고 있어요 : 같은 부분 뷰를 호출

을3210

'System.NullReferenceException'유형의 예외가 App_Web_gdyh352c.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다.

이 방법이 좋은지 (3vms로 전화하는 경우) 조언을 해 주시겠습니까?

감사합니다.

답변

1

부분보기에 대한 모델을 생성하려면 @{Html.RenderPartial("Realty");}을 바꾸고이 경우 컨트롤러 동작을 다시 호출해야하므로 @Html.Action("Realty")을 사용해보십시오.

자세한 내용은 MVC Html.Partial or Html.Action을 참조하십시오.

+0

큰 감사, 이것은 작동합니다. 이 접근법이 (성능 관점에서) 좋은지 의심 스럽지만, 3 가지 다른 VM을 가진 3 가지 Html.Action 메소드를 호출하여 끝낼 것입니다. –

+0

MVC를 사용한 매우 일반적인 접근 방식입니다. 같은 데이터를로드하는 중입니다. 어떤 시점에서 컨트롤러에서 호출해야합니다. 다른 옵션은 기본보기에 대해 1 개의 큰보기 모델을 만들고 예를 들어 사용합니다. @@ Html.Partial ("_ partialName", model.Realty)' –

관련 문제