2016-10-23 16 views
-1

私は3つのカテゴリを表すことができるモデルを持っています。私は私の見解では、関連するフィールドを持つ各カテゴリの3つのテーブルを作成したい。私はこれについては、各カテゴリのビューモデルで部分的なビューを使用する必要があると思います。ビューモデルを部分ビューにバインド

私のメインモデルは3つのサブビューモデル(Realty、Auto、Service)を持つ "Ad"です。私は私のホームコントローラ上で不動産のアクションを実装する方法をここで 例:次に

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」種類の例外は、このアプローチは、(3つのVMSを呼び出す)良ければはい、これを実装する方法場合は、アドバイスしてもらえApp_Web_gdyh352c.dllで発生したが、ユーザーコード

で処理されていませんでしたか?

ありがとうございました。

答えて

1

この場合、@{Html.RenderPartial("Realty");}を置き換えてください。この場合は、コントローラのアクションにコールバックする必要があるため、パーシャルビューのモデルを作成してください。

詳細については、MVC Html.Partial or Html.Actionを参照してください。

+0

大きな感謝、これは動作します。私は疑問を持っているとアドバイスできますか?このアプローチはパフォーマンスの観点からは良いですか?3つの異なるVMで3つのHtml.Actionメソッドを呼び出すことになります。 –

+0

MVCの非常に一般的なアプローチです。あなたはまだ同じデータをロードしています - コントローラからある時点で呼び出す必要があります。もう1つの選択肢は、メインビューの1つの大きなビューモデルを作成し、たとえば、 '@Html.Partial(" _ partialName "、model.Realty)' –

関連する問題