采用IEnumerable <model> vs Model的Razor View之间的区别?

时间:2015-05-24 07:08:28

标签: razor asp.net-mvc-5

我看到有些人在他们的观点顶部写了@model IEnumerable<WebApplication1.Models.Weight>,有些人写了@model WebApplication1.Models.Weight

我想知道两者之间的区别。喜欢何时使用什么?

1 个答案:

答案 0 :(得分:7)

IEnumerable<Entity>作为模型的剃刀视图意味着控件将一组对象(例如视图模型或实体)作为模型传递给页面。 e.g。

@model IEnumerable<MyNamespace.Entity>

将匹配Controller操作,例如

[HttpGet]
public ActionResult SearchByName(string startsWith)
{
    var entities = Db.Entities
       .Where(e => e.StartsWith(startsWith))
       .ToList();
    return View(entities);
}

这样视图就可以访问多个Entity个对象(例如,相关页面可能是IndexSearch result页面,其中的条目可以以表格形式列出一个foreach

相比之下,将单个对象作为模型的剃刀视图只显示一个对象,例如

@model MyNamespace.Entity

将从控制器操作中使用,例如

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

表示该视图具有单个Entity模型主题,例如该页面可能会显示一个Entity对象的详细信息,或允许更新或只插入一个Entity

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

另外需要注意的一点是IEnumerable也表达了不变性,即View应该读取集合,但可能不会例如来自AddDelete个实体(即优良作法是离开脚手架IEnumerable而不是将其更改为例如IListICollection