我被告知从ASP直接引用IQueryable。NETMVC视图是一种糟糕的做法,但我没有找到任何明确的解释。有些人在访问视图中的IQueryable或DbContext时可能会遇到“已释放对象”错误,但这不是我关心的问题。
下面是我如何实现一个简单的控制器和一个包含用户列表的视图
public ActionResult Index()
{
return View(db.Users);
}
在我看来
@model IEnumerable<User>
<ul>
@foreach (var user in Model)
{
<li>@user.UserName</li>
}
</ul>
有人告诉我应该返回一个“集合对象”,而不是将IQueryable传递给视图。
public ActionResult Index()
{
return View(db.Users.ToList());
}
我有点好奇我为什么要这么做。我可以说,后一种方法比我的第一种方法更糟糕,因为数据集在我的应用程序中迭代了两次,首先构造
List
对象
ToList()
方法,其次是
foreach
在我的视图中循环以渲染
<li>
项目。
因此,这意味着后一种方法必须有一个我还没有发现的更好的点。即使在ASP。NET论坛或Microsoft MSDN网站,他们也提供了后一种方法的示例,但没有给出任何理由,或者我遗漏了什么?
有人能为我解释一下这些简单的基本内容吗?
非常感谢。