3

私のアプリケーションには、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」のモデルアイテムが必要です。

ビューが期待しているものに対して正しいタイプを渡していないことは理解していますが、理解できないようです。

  1. そもそもビューモデルは正しく設定されていますか(値と子のリストを組み合わせる方法)
  2. linqクエリを構造化して、すべてのデータを含む1つのAreaViewオブジェクトを取得する方法
  3. 適切に(正しいタイプで)私のビューに渡します

Stackoverflowで約45件の投稿を読みましたが、上記のことを達成するためにそれらをつなぎ合わせることができないようです。誰かが正しい解決策(または方向性さえ)を持っているなら、私は非常に感謝するでしょう。

助けてくれてありがとう。

4

2 に答える 2

1

を返すには、クエリの最後に FirstOrDefault() を追加する必要があると思いますAreaView

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()
                 }).FirstOrDefault();

    return View(model);
}
于 2013-02-25T18:29:03.063 に答える
0

同じクエリで両方のオブジェクトを組み合わせることはありません。私はするだろう

1) id = xxxx の AreaView を選択します。

2) id = xxxx のエリアを選択

3) 自分の AreaView にエリアを割り当てる

AreaView model = GetAreaView(id);

model.Areas = GetAreas(id);

return View(model);

また、現在のコードに対して次のことを試してください

return View(model.FirstOrDefault());
于 2013-02-25T18:32:42.583 に答える