2017-09-24 6 views
0

プロパティIDに基づいてイメージを取得しようとしています。ビューバックからデータを取り出すことができます。条件はどこですか?

私がやっていることは、1つのビューバッグ内のすべてのプロパティテキストデータにViewBag.tblPropertyというメッセージが表示され、別のビューバッグ内のすべての画像をViewBag.tblImagesと取得しています。

これは私のコードです:

@foreach (System.Data.DataRow dr in ViewBag.tblProperty.Rows) 
{  
    <ul class="[email protected]["PropertyID"] [email protected]["PropertyID"]"> 
    @foreach (System.Data.DataRow dr in ViewBag.tblimages.where(@dr["PropertyID"]).Rows) 
    { 
     <li><a href="@dr["FileName"]"><img src="@dr["FileName"]" /></a></li> 
    } 
    </ul> 
} 

私はPropertyIDViewBag.tblPropertyから取得に基づいてViewBag.tblImagesから画像を取得します。

どうすればいいですか?

+1

これは 'ViewBag'の悪用のようです。 'DataTables'は強く型付けされておらず、その上に' ViewBag'に割り当てられています。 'Datatable'をコントローラ内のリストに変換し、Viewで使用します。 – adiga

答えて

1

ViewBagは、項目を動的な型として格納する辞書です。だから、最初DataTableにそれを変換する必要がありますし、あなたのtblImagesを想定すると、Where

IdFileNameParentId性質を持っていて、あとで使用できる匿名オブジェクトのリストにあなたのデータテーブルを変換するAsEnumerableメソッドを使用することができます

@{ 
    var imgsDt = ViewBag.tblimages as DataTable; 
    var imageList = imgsDt.AsEnumerable().Select(t => new 
    { 
     Id = t.Field<int>("Id"), 
     FileName= t.Field<string>("FileName"), 
     ParentId = t.Field<int>("ParentId"), 
    }).ToList(); 
} 
@foreach (var dr in ViewBag.tblProperty.Rows) 
{ 
    var id = (int) dr["Id"]; 

    <div> 
     <span>@dr["Name"]</span> 
     @foreach (var imgItem in imageList.Where(d=>d.ParentId== id)) 
     { 
      <div>@imgItem.FileName</div> 
     } 
    </div> 
} 

@using System.Dataをビューの先頭に追加する必要があります。

簡単にするために、div内に名前/プロパティ値を表示するだけでマークアップを更新しました。

これで問題は解決する可能性がありますが、データを転送するためにViewBagでDataTableを使用しないことを強くお勧めします。。コードは維持するのが難しいでしょう。ビューモデルクラスを作成し、アクションメソッドのビューモデルにデータをロードし、ビューモデルをビューに送信することをお勧めします。この方法では、どのような種類のデータアクセスを使用しているかわからないため、非常にきれいで読みやすいようになります。

カスタムado.netコードを作成する場合は、SqlDataReaderを使用できます。エンティティを表すPOCOクラスを作成し、それに割り当てます。それについてインターネット上にたくさんのサンプルがあります。

+0

また、 'using System.Data'を追加する必要があります。 – adiga

+0

ここに、DataReaderとカスタムPOCOクラスによるデータの取得に関するサンプル投稿があります。https://stackoverflow.com/questions/37092862/how-to-iterate-data-from-two -columns-into-single-select-box-in-asp-net-mvc/37093256#37093256(ちょうど最初の部分) – Shyju

+0

例としてビューモデルを渡す方法を説明できます –

関連する問題