Razor视图无法使用foreach遍历模型及视图模型传递问题
搞定Razor视图遍历
List<ProjectTypeViewModel>的问题 嘿,我来帮你梳理下怎么解决这个遍历的问题~
首先第一步,先确认你的视图模型声明是不是完整正确的,应该写成这样(记得补全对应的命名空间):
@model List<MyProject.ViewModels.ProjectTypeViewModel>
接下来,因为你的模型是一个**ProjectTypeViewModel的列表**,每个ViewModel里又包含了一个Tipo集合(也就是IEnumerable<ProjectType>),所以需要两层foreach来遍历:先遍历每个分类组,再遍历组里的项目类型。给你一个现成的代码示例,直接用就行:
@foreach (var categoryGroup in Model) { <h3>@categoryGroup.CategoryName</h3> <ul> @foreach (var projectType in categoryGroup.Tipo) { <li> 类型名称:@projectType.Type | 添加人:@projectType.AddedBy <!-- 这里可以根据需求添加更多要展示的属性 --> </li> } </ul> }
顺便给你排查几个常见坑
- 空引用报错:如果你的
Model本身是空的,或者某个categoryGroup.Tipo没数据,直接遍历会报错。可以加个空值检查,稳一点:@if (Model != null && Model.Any()) { @foreach (var categoryGroup in Model) { <h3>@categoryGroup.CategoryName</h3> @if (categoryGroup.Tipo != null && categoryGroup.Tipo.Any()) { <ul> @foreach (var projectType in categoryGroup.Tipo) { <li>@projectType.Type</li> } </ul> } else { <p>这个分类下还没有项目类型哦~</p> } } } else { <p>暂无分类数据</p> } - 模型类型不匹配:如果你的控制器传过来的是单个
ProjectTypeViewModel,而不是列表,那视图里的Model就不是集合,肯定没法用foreach。这时候要去控制器里检查返回逻辑,确保传的是列表,比如:public IActionResult YourAction() { var viewModelList = new List<ProjectTypeViewModel> { // 这里填充你的数据,比如从数据库查询后映射过来 }; return View(viewModelList); }
如果还有具体的错误提示,随时说,但按照上面的方式调整,应该就能解决遍历的问题啦~
内容的提问来源于stack exchange,提问作者J Smith
相关产品推荐
相关产品推荐

