私のアプリケーションには、1つの施設内に複数の領域があります。施設の値(facility_id、facility_name)とエリアのリストを含むビューに単一のモデルを渡そうとしています。現在、テーブルのエンティティモデルのタイプとしてエリアのリスト(area_list)があります。
私のビューモデルは次のとおりです。
public class AreaView
{
public string facility_name { get; set; }
public int facility_id { get; set; }
public int group_id { get; set; }
public IList<area_list> areas { get; set; }
}
余談ですが、もともとはモデルarea_listではなく別のviewmodel(AreaS)としてエリアのリストを設定しようとしましたが、他にも問題があったため、簡単にするために直接参照することに戻りました。これがより適切だと思います...
私のコントローラー:
public ActionResult List(int id = 0)
{
var model = (from f in areaDB.facility_list
where f.facility_id == id
select new AreaView
{
facility_id = f.facility_id,
facility_name = f.facility_name,
areas = (from a in areaDB.area_list
orderby a.area_name
where a.facility_id == id
select a).ToList()
});
return View(model);
}
私の見解(省略):
@model SkyeEnergy.Models.AreaView
Facility: @Model.facility_name
@foreach (var item in Model.areas) {
<tr>
<td>
@Html.ActionLink(item.vendor_name,"Details","Area",new {id = item.vendor_id},null)
</td>
</tr>
}
私は以下のことを達成するために多くのバリエーションを試しましたが、それは私に多くのエラーを与えました、しかし最新のものは以下です:
ディクショナリに渡されるモデルアイテムのタイプは「System.Data.Entity.Infrastructure.DbQuery`1[MyApp.Models.AreaView]」ですが、このディクショナリにはタイプ「MyApp.Models.AreaView」のモデルアイテムが必要です。
ビューが期待しているものに対して正しいタイプを渡していないことは理解していますが、理解できないようです。
- そもそもビューモデルは正しく設定されていますか(値と子のリストを組み合わせる方法)
- linqクエリを構造化して、すべてのデータを含む1つのAreaViewオブジェクトを取得する方法
- 適切に(正しいタイプで)私のビューに渡します
Stackoverflowで約45件の投稿を読みましたが、上記のことを達成するためにそれらをつなぎ合わせることができないようです。誰かが正しい解決策(または方向性さえ)を持っているなら、私は非常に感謝するでしょう。
助けてくれてありがとう。