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

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

AIEnumerable基本上是一种通用数据类型,允许您枚举其项目,List 是它的扩展。

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

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 的类类型。如果这是实体框架,那么您可以为此使用从您的模型自动生成的类。

于 2012-07-20T19:31:30.563 回答