ASP.Net MVC Core 6按ID查询数据无法传递至视图问题求助
问题定位
你代码中存在两处直接导致数据无法传递的逻辑错误,还有一处会导致数据无法正常入库的逻辑反转问题:
Details动作方法查询到产品对象后,未将对象作为参数传入View方法,视图接收不到任何模型数据CreateHttpPost接口的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
相关产品推荐
相关产品推荐

