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

ASP.Net MVC Core 6按ID查询数据无法传递至视图问题求助

问题定位

你代码中存在两处直接导致数据无法传递的逻辑错误,还有一处会导致数据无法正常入库的逻辑反转问题:

  • Details 动作方法查询到产品对象后,未将对象作为参数传入View方法,视图接收不到任何模型数据
  • Create HttpPost接口的ModelState校验逻辑写反,合法数据不会被写入数据库,数据库无对应ID的记录时查询自然返回空
  • 若运行时未抛出依赖注入相关异常,可跳过服务注册检查,否则需要补全DI配置

修复方案

1. 修正Details动作

将ProductController中的Details方法修改为如下代码,传入查询到的模型,同时增加空值校验避免非法ID触发空引用错误:

public IActionResult Details(int id)
{
    var product = _service.GetProductById(id);
    if (product == null)
    {
        return NotFound();
    }
    return View(product);
}

2. 修正Create动作的校验逻辑

把判断条件反转,仅在模型校验通过时执行入库操作,校验失败返回表单展示错误信息:

[HttpPost]
public IActionResult Create([Bind("ProductImageUrl, ProductName, ProductPrice")]Product product)
{
    if (!ModelState.IsValid)
    {
        return View(product);
    }
    _service.AddProduct(product);
    return RedirectToAction(nameof(Index));
}

3. 补全依赖注入配置(按需检查)

打开项目根目录的Program.cs,确认已添加DbContext和服务的注册代码:

// 注册数据库上下文,连接字符串键名替换为你自己appsettings.json中配置的名称
builder.Services.AddDbContext<ShopDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
// 注册产品服务
builder.Services.AddScoped<IProductService, ProductService>();

说明

你写的ProductService中GetProductById查询逻辑本身没有问题,不需要修改。修复后先通过Create页新增一条测试数据,确认Index列表页可以看到新增数据后,再进入详情页验证即可。

错误截图

内容的提问来源于stack exchange,提问作者đằng dương

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:24:22