我看到有些人在他们的观点顶部写了@model IEnumerable<WebApplication1.Models.Weight>
,有些人写了@model WebApplication1.Models.Weight
我想知道两者之间的区别。喜欢何时使用什么?
答案 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
个对象(例如,相关页面可能是Index
或Search 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应该读取集合,但可能不会例如来自Add
或Delete
个实体(即优良作法是离开脚手架IEnumerable
而不是将其更改为例如IList
或ICollection
。