1

このようなクラスのモデルがあります

public class Feature
{
    public int ID { get; set; }
    public string Desc { get; set; }
    public List<Camera> { get; set; }
}

そしてこのようなもの:

public class Camera
{
    public int ID { get; set; }
    public string ModelName { get; set; }
    public List<Feature> Features { get; set; }
}

Camera モデルの Controller と View を作成し、Feature コレクションに複数の Feature オブジェクトを含む 2 つのカメラを追加しました。

ただし、カメラ ビュー (インデックス、詳細、編集) をレンダリングすると、機能フィールドがどこにも表示されません。Index ビューと Details ビューで、Features コレクションの項目を、1 行に 1 つの項目を持つ複数行のテキストとして表示したいと考えています。

どうやって?

デイブ

PS: 次の質問は、編集ビューに、現在のカメラの機能アイテムが既に選択されている機能テーブル内のすべてのアイテムをリストする複数選択スクロール リストを表示する方法に関するものです。

4

2 に答える 2

0

コントローラーからのコードがなければ、なんとも言えませんが、Entity Framework で非常によくある問題は、.Include()拡張メソッドの使用を忘れることです。たとえばvar cameras = db.Cameras.Include(c => c.Features).ToList(); 、ビューに渡すカメラと関連する機能のリストが表示されます。

また、Navigation プロパティに virtual キーワードを追加すると、Entity Framework は "遅延読み込み" を実行できます。この場合、関連付けられた項目が最初にアクセスされたときに (サーバー側で) 自動的に読み込まれます。一般に、ほとんどのナビゲーション プロパティはジェネリックとしても定義されます。例えば:

public class Feature
{
    public int ID { get; set; }
    public string Desc { get; set; }

    public virtual ICollection<Camera> Cameras { get; set; }
}

public class Camera
{
    public int ID { get; set; }
    public string ModelName { get; set; }
    public virtual ICollection<Feature> Features { get; set; }
}

これにより、フィルタリングと並べ替えのための拡張メソッドのはるかに大きな配列にアクセスできます。 IEnumerableは動作を記述し、Listはその動作の実装です。を使用するIEnumerableと、コンパイラに作業を後回しにする機会が与えられ、途中で最適化される可能性があります。を使用Listすると、コンパイラに結果をすぐに具体化するように強制します。あなたの場合、IEnumerable はリストの参照のみを許可するため、ICollection と IEnumearable を使用する必要がありますが、ICollection は Entity Framework 内部で使用される CopyTo メソッドを定義します。

于 2013-08-10T20:35:39.150 に答える
0

DisplayTemplate を使用するだけです。

これを行うには、~/Views/Shared/にDisplayTemplatesというフォルダーを追加し、 Feature.cshtmlという名前の PartialView を追加します。新しく作成した PartialView に次のコードを追加します。

@model Feature

<li>@Model.Desc</li>

次に、カメラ モデルのビューで、次のようにします。

<ul>
     @Html.DisplayFor(e => e.Features)
</ul>
于 2013-08-10T20:54:54.523 に答える