Razor视图与IEnumerable视图之间的差异<;模型>;vs模型?

Razor视图与IEnumerable视图之间的差异<;模型>;vs模型?,razor,asp.net-mvc-5,Razor,Asp.net Mvc 5,我见过一些人在他们的视图顶部写@model-IEnumerable,还有一些人写@model-WebApplication1.Models.Weight 我想知道两者之间的区别。比如什么时候使用什么?一个razor视图,它将一个IEnumerable作为一个模型,这意味着一组对象(例如视图模型或实体)作为模型由控制器传递给页面。e、 g @model IEnumerable<MyNamespace.Entity> 这样视图就可以访问多个实体对象(例如,所涉及的页面可能是索引或搜索结

我见过一些人在他们的视图顶部写
@model-IEnumerable
,还有一些人写
@model-WebApplication1.Models.Weight


我想知道两者之间的区别。比如什么时候使用什么?

一个razor视图,它将一个
IEnumerable
作为一个模型,这意味着一组对象(例如视图模型或实体)作为模型由控制器传递给页面。e、 g

@model IEnumerable<MyNamespace.Entity>
这样视图就可以访问多个
实体
对象(例如,所涉及的页面可能是
索引
搜索结果
页面,其中条目可以用
foreach
以表格形式列出)

相反,以单个对象为模型的razor视图仅显示一个对象,例如

@model MyNamespace.Entity
将从控制器操作中使用,例如

[HttpGet]
public ActionResult Details(int id)
{
    var entity = Db.Entities.Find(id);
    if (entity == null)
        return HttpNotFound();
    return View(entity);
}
表示视图有一个
实体
模型主题,例如,页面可能显示一个
实体
对象的详细信息,或允许更新或仅插入一个
实体

页面可用的相应的
模型
实例对象将是
@Model
的相应类型

另一点需要注意的是,
IEnumerable
也表示不变性,即视图应该读取集合,但不能从集合中添加或删除实体(即,最好将脚手架保持在
IEnumerable
状态,而不要将其更改为
IList
ICollection

[HttpGet]
public ActionResult Details(int id)
{
    var entity = Db.Entities.Find(id);
    if (entity == null)
        return HttpNotFound();
    return View(entity);
}