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

ASP.NET MVC Razor页面foreach空引用异常排查求助

错误分析与修复方案

核心错误根源

你遇到的Object reference not set to an instance of an object是因为Razor页面的Model为null,调试器指向foreach代码段是因为你直接遍历未赋值的Model。以下是具体问题和修复步骤:

1. 控制器List方法未传递模型数据

你的SeminarController中List方法仅返回视图,未将用户列表传递给视图:

public IActionResult List()
{
    return View(); // 未传入模型数据
}

修复后:

public IActionResult List()
{
    return View(Repository.Users); // 将仓储中的用户列表传递给视图
}

2. 仓储类的多处问题

  • 静态构造函数类型不匹配:你用new KullaniciBilgi()初始化数据,但模型类是UserInfo,需统一类型:
static Repository()
{
    // 替换KullaniciBilgi为UserInfo
    _users.Add(new UserInfo() { Id = 1, Name = "Busra", Email = "blablabla@gmail.com", Phone = "111111111", WillAttend = true });
    _users.Add(new UserInfo() { Id = 2, Name = "Nur", Email = "blablabla@gmail.com", Phone = "8384388438", WillAttend = true });
    _users.Add(new UserInfo() { Id = 3, Name = "Busra", Email = "blablabla@gmail.com", Phone = "3438848384", WillAttend = true });
}
  • 方法名称不匹配:控制器Details方法调用Repository.TakeId(id),但仓储中对应方法是IdAl,需统一名称:
    要么修改仓储方法名:
    public static UserInfo? TakeId(int id)
    {
        return _users.FirstOrDefault(user => user.Id == id);
    }
    
    要么修改控制器调用:
    public IActionResult Details(int id)
    {
        return View(Repository.IdAl(id));
    }
    
  • CreateUser方法ID赋值逻辑错误:当前代码先添加用户再赋值ID,会导致ID重复,需调整顺序:
public static void CreateUser(UserInfo user)
{
    user.Id = _users.Count + 1; // 先赋值ID,再添加到列表
    _users.Add(user);
}

3. Razor页面HTML结构错误

你的foreach中<tr>标签提前闭合,导致<td>脱离表格行结构,同时遗漏了Email列输出,路由路径也和控制器名称不匹配:

@foreach(var user in Model) 
{
    var status = user.WillAttend ? "Evet" : "Hayır";
    var classname = user.WillAttend ? "table-success" : "table-danger";
    if(user.WillAttend)
    {
        i++;
        <tr class="@classname">
            <td>@user.Name</td>
            <td>@user.Email</td> <!-- 补上遗漏的Email列 -->
            <td>@status</td>
            <td>
                <a class="btn btn-sm btn-primary" href="/Seminar/details/@user.Id">Detail</a>
                <!-- 路由与控制器名称Seminar保持一致,修正seminer拼写 -->
            </td>
        </tr>
    }
}

4. 可选的空值防护

为避免Model为空时的异常,可在Razor页面开头添加空值判断:

@if (Model == null || !Model.Any())
{
    <p>暂无用户数据。</p>
}
else
{
    <!-- 表格代码 -->
}

内容的提问来源于stack exchange,提问作者Büşra Nur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:24:54