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

ASP.NET MVC传递ID至Action方法时出现ID=0传入引发空引用异常

问题分析与解决方案

核心问题

当传入ID=0时,ProjectStore.GetProjectsBy(0)会返回null(所有项目ID从1开始),而视图直接访问@Model.Id等属性,触发NullReferenceException。ID=0的出现通常是路由允许ID可选,或页面存在未正确传递ID的请求触发。


第一步:立即修复空引用异常

修改Action方法处理空值

在ProjectDetails方法中先判断查询结果是否为空,避免将null传递给视图:

public IActionResult ProjectDetails(long id)
{
    var projectById = Data.ProjectStore.GetProjectsBy(id);
    if (projectById == null)
    {
        // 返回404页面或自定义错误视图
        return NotFound();
        // 也可使用 return View("Error");
    }
    return View(projectById);
}

视图增加空值防护(可选)

即使Action已处理null,视图中增加检查可进一步避免意外:

<section class="contact-section px-3 py-5 p-md-5">
    <div class="container">
        @if (Model != null)
        {
            <table class="table table-bordered table-hover">
            <thead>
                <tr>
                    <td>ID</td>
                    <td>Name</td>
                    <td>Description</td>
                    <td>Client</td>
                    <td>Image</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>@Model.Id</td>
                    <td>@Model.Name</td>
                    <td>@Model.Description</td>
                    <td>@Model.Client</td>
                    <td><img src="~/assets/images/project/@Model.Image" width="50px" /></td>
                </tr>
            </tbody>
            </table>
        }
        else
        {
            <p>未找到指定项目</p>
        }
    </div>
</section>

第二步:排查并解决ID=0的来源

约束路由参数

如果使用默认路由{controller}/{action}/{id?},id?表示可选,直接访问/Controller/ProjectDetails时long类型id会取默认值0。可修改路由强制id为正整数:

// .NET 6+ 在Program.cs,旧版本在Startup.cs中修改路由
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id:int:min(1)}");

{id:int:min(1)}约束id必须是≥1的整数,非法请求直接返回404,避免ID=0传入。

检查页面请求触发点

确保所有调用ProjectDetails的链接都正确传递id,比如项目列表页的链接应写为:

@foreach (var item in Model)
{
    <td><a asp-action="ProjectDetails" asp-route-id="@item.Id">查看详情</a></td>
}

避免遗漏asp-route-id参数或错误传递0的情况。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:52:26