我有一个使用列表和字符串值的视图。
目前我正在执行以下操作并将其传递给视图:
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查询。
答案 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的类类型。如果这是实体框架,那么您可以使用从模型中自动生成的类。