MVC ViewModel使用List

时间:2012-07-20 19:23:56

标签: asp.net-mvc linq asp.net-mvc-viewmodel

我有一个使用列表和字符串值的视图。

目前我正在执行以下操作并将其传递给视图:

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

return PartialView(Note);

如您所见,目前我将Note(这是一个列表)传递给View,然后将在我的视图中直接获取ViewBag。

我喜欢做的是为此创建一个viewmodel。 我想知道为我需要的东西创建一个viewmodel的最佳做法是什么。

以下是我为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      
}

我在IEnumerable<Notes>中创建Notes的位置有些迷失,我是否在另一个Notes文件中创建另一个名为.cs的类,如何分配相应的键入它。 将代表LINQ查询。

1 个答案:

答案 0 :(得分:1)

我假设您希望Notes成为Note类型的列表?如果是这样,为什么不做IEnumerable<Note>

IEnumerable基本上是一种通用数据类型,允许您枚举其项目,列表是其扩展名。

因此,您只需将代码更改为: -

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 );
}

所以我们所做的就是获取List并将其传递给IEnumerable,因为IEnumerable是List的通用形式。基本上,一个项目可以实现IEnumerable,它需要通过其数据库支持迭代...例如

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

哪个是相同的(几乎是)

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

如果您询问Note的数据类型应该是什么,那么这将是db.tblNote的类类型。如果这是实体框架,那么您可以使用从模型中自动生成的类。