1

リストと文字列値を利用するビューがあります。

現在、私は次のことを行って、それをビューに渡します。

var Note = (from p in db.tblNote where p.NoteName = pnote  select  p).ToList();
ViewBag.NotesID = id;

return PartialView(Note);

ご覧のとおり、現在、ノート(リスト)をビューに渡してから、ビューで直接ViewBagを取得します。

私がやりたいのは、このためのビューモデルを作成することです。必要なもののビューモデルを作成するためのベストプラクティスを知りたいです。

これが私がViewModelのために思いついたものです:

public class NotesViewModel
{        
    public string NotesID { get; set; } // this will replace where I had ViewBag.NotesID

    public IEnumerable< Notes>  NotesList { get; set; } // this will replace where I had var Note = (from p in db.tblNote      
}

に表示されているNotesをどこで作成するか、別のファイルで呼び出される別のクラスを作成するか、それに適切なタイプを割り当てる方法について、少し迷っていIEnumerable<Notes>ます。はLINQクエリを表します。Notes.cs

4

1 に答える 1

1

ノートをノートタイプのリストにしたいと思いますか?もしそうなら、なぜそれをしないのIEnumerable<Note>ですか?

AIEnumerableは基本的に、そのアイテムを列挙できる一般的なデータ型であり、これを拡張したリストです。

したがって、コードを次のように変更するだけです:-

public class NotesViewModel
{        

    public string NotesID { get; set; } // this will replace where I had ViewBag.NotesID

    public IEnumerable<Note>  NotesList { get; set; } // this will replace where I had var Note = (from p in db.tblNote

}

public ActionResult MyFunction()
{
    var Notes = (from p in db.tblNote where p.NoteName = pnote 
            select  p).ToList();

    var oMyNotesVM = new NotesViewModel();
    oMyNotesVM.NotesID = id;
    oMyNotesVM.NotesList = Notes;

    return PartialView(oMyNotesVM );
}

IEnumerableはListの汎用形式であるため、ここで行ったのはListを取得してIEnumerableに渡すことだけです。基本的に、アイテムがIEnumerableを実装するには、データメンバーを介した反復をサポートする必要があります。たとえば、

while(enumerator.MoveNext())
{
  object obj = enumerator.Current;
  // work with the object
}

これは同じです(ほぼ同じです)

foreach(object obj in collection)
{
    // work with the object
}

データ型を尋ねる場合、Noteそれはdb.tblNoteのクラス型になります。これがエンティティフレームワークの場合は、モデルから自動生成されたクラスを使用できます。

于 2012-07-20T19:31:30.563 に答える