采用 IEnumerable<Model> 的 Razor 视图与模型之间的区别?

问题描述 投票:0回答:2

我看到有些人在视图顶部写下

@model IEnumerable<WebApplication1.Models.Weight>
,有些人则写下
@model WebApplication1.Models.Weight

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

razor asp.net-mvc-5
2个回答
7
投票

IEnumerable<Entity>
作为模型的 razor 视图意味着控制器将对象集合(例如视图模型或实体)作为模型传递到页面。例如

@model IEnumerable<MyNamespace.Entity>

将匹配控制器操作,例如

[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
也表示不变性,即视图应该读取集合,但可能不读取,例如其中的
Add
Delete
实体(即,最好离开脚手架
IEnumerable
并且不要将其更改为例如
IList
ICollection
)。


0
投票

我可以在同一视图中同时使用 model 和 IEnumerable 吗?

© www.soinside.com 2019 - 2024. All rights reserved.