2017-12-05 19 views
1

データベースにテーブルがあり、名前フィールドを繰り返しなくしたいと思っています。 しかし、私はこのエラーを受け取ります:ViewBagからのデータを表示できません

'string'には 'ID'の定義が含まれていません。 私は自分のコードをデバッグするときに、foreachエラーが現れるまで、データでいっぱいの変数を見つけます。私のコントローラで

public ActionResult Create() 
{ 
      HREntities db = new HREntities(); 
      var areas = db.Area.Select(area => area.Area + area.ID).Distinct().ToList(); 
      if(areas != null) 
       ViewBag.areas = areas; 

      return View(); 
} 

ビューのコード:

var areas = db.Area.Select(area => area.Area + area.ID).Distinct().ToList(); 

:コントローラでのごCreate方法で

@foreach (var area in ViewBag.areas) 
{ 
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12"> 
     <input name="group4" type="radio" id="@area.ID" class="radio-col-blue-grey" /> 
     <label for="@area.ID">@area.Area</label> 
    </div> 
} 
+1

サイドノート - 'ID'と' Area'プロパティを組み合わせると重複してしまうので、 '.Distinct()'は必要ないようです。そして、 'ViewBag'を使うのではなく、ビューにモデルを渡すことを強くお勧めします.Htmlを生成するために' HtmlHelper'メソッドを使うことを含め、モデルをビューに強く入力してください。 –

+0

はい、私はあなたに同意します、私がやったこと。あなたの説明をありがとう –

答えて

1

、次の行にList<string>を作成していますこのリストをViewBagに渡しますが、これは文字列はList<Area>ではなく、そこにIDプロパティはありません。

デバッグ中に、変数areasのタイプを確認してください。 foreachループであなたのマークアップコードは次のようになります。

<input name="group4" type="radio" id="@area" class="radio-col-blue-grey" /> 
<label for="@area">@area</label> 
1

あなた.Select()クエリがAreaオブジェクトのコレクション(およびstringIdという名前のプロパティを持っていない)、IEnumerable<string>にない返しているに基づいて

クエリビューのコードは、あなたのモデルのコレクションを返すために必要なだけの

@foreach (var area in ViewBag.areas) 
{ 
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12"> 
     <input name="group4" type="radio" id="@area" class="radio-col-blue-grey" /> 
     <label for="@area">@area</label> 
    </div> 
} 

Alternativeyする必要があります

関連する問題