You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:44:57