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

Asp.Net MVC报错“Cannot perform runtime binding on a null reference”求助

Asp.Net MVC项目空引用运行时绑定异常问题

问题背景

原本运行正常的Asp.Net MVC项目突然出现异常,怀疑与Razor相关,更新Visual Studio后问题仍未解决。

相关代码

CSHTML代码

<div class="small-box bg-success">
    <div class="inner">
        <h3> @ViewBag.countActivityFinish </h3>
        <p>Tamamlanan Aktivite Sayısı</p>
    </div>
    <div class="icon">
        <i class="ion ion-pie-graph"></i>
    </div>
    <a href="/Activity" class="small-box-footer">Aktiviteleri Gör <i class="fas fa-arrow-circle-right"></i></a>
</div>

控制器代码

public ActionResult Index()
{
    if (Session["user"] == null) return RedirectToAction("Index", "Login");

    conn.Open();

    User withEmailToUser = conn.Query<User>("SELECT * FROM [User] WHERE Email = @Email", new User() { Email = Session["user"].ToString() }).FirstOrDefault();

    List<UserWrongLoginLog> userWrongLoginLogs = conn.Query<UserWrongLoginLog>("SELECT * FROM [UserWrongLoginLog] WHERE UserId = @UserId", new UserWrongLoginLog() { UserId = (Guid)withEmailToUser.Id }).ToList();    
    foreach (var item in userWrongLoginLogs)
    {
        conn.Execute("DELETE FROM [UserWrongLoginLog] WHERE Id=@Id", item);
    }

    int countCompany = conn.Query<int>("SELECT COUNT(*) FROM Company WHERE IsDelete = @IsDelete", new Company() { IsDelete = false }).FirstOrDefault();
    int countContact = conn.Query<int>("SELECT COUNT(*) FROM Contact WHERE IsDelete = @IsDelete", new Contact() { IsDelete = false }).FirstOrDefault();
    int countActivityWaiting = conn.Query<int>("SELECT COUNT(*) FROM Activity WHERE Status = @Status", new Activity() { Status = 0 }).FirstOrDefault();
    int countActivityFinish = conn.Query<int>("SELECT COUNT(*) FROM Activity WHERE Status != @Status", new Activity() { Status = 0 }).FirstOrDefault();

    conn.Close();

    withEmailToUser.UserWrongLoginLogs = userWrongLoginLogs;

    ViewBag.countCompany = countCompany;
    ViewBag.countContact = countContact;
    ViewBag.countActivityWaiting = countActivityWaiting;
    ViewBag.countActivityFinish = countActivityFinish;
    ViewBag.user = withEmailToUser;
    return View();
}

错误信息

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对空引用执行运行时绑定

排查与解决建议

  1. 检查用户查询结果是否为空
    代码中直接使用(Guid)withEmailToUser.Id,若Session["user"]对应的用户在数据库中不存在,withEmailToUser会为null,此处会抛出空引用异常,导致后续ViewBag赋值代码无法执行,Razor渲染时因ViewBag.countActivityFinish未初始化触发错误。需添加空判断:

    User withEmailToUser = conn.Query<User>("SELECT * FROM [User] WHERE Email = @Email", new User() { Email = Session["user"].ToString() }).FirstOrDefault();
    if (withEmailToUser == null)
    {
        return RedirectToAction("Index", "Login"); // 或其他自定义处理逻辑
    }
    
  2. 确保数据库查询正常执行
    虽然COUNT(*)查询即使无数据也会返回0,但需确认数据库连接conn是否正常,Activity表的Status字段是否存在且类型匹配,避免查询过程中出现未捕获异常导致ViewBag赋值中断。

  3. 添加全局异常捕获
    在项目中添加全局异常过滤器,捕获控制器执行过程中的异常,便于定位具体出错位置,而不是仅在Razor渲染时抛出模糊的空引用绑定错误。

内容的提问来源于stack exchange,提问作者Hasan Polat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:03:21