ASP.NET项目点击商品详情Action链接时id为0报错,修改为有效值可正常运行
问题原因
- 点击详情链接时传入的id为0,数据库中不存在id=0的商品数据,
GetPhone方法返回null值,视图渲染null对象时触发空引用异常。 - 索引页生成的详情链接参数错误,没有正确绑定每个商品对应的id值,导致所有详情链接默认传入int类型的默认值0。
修复方案
1. 控制器逻辑补充校验
给Details方法增加参数合法性校验和空结果处理,避免无效查询和空引用报错:
public ActionResult Details(int id) { // 过滤非法id参数 if(id <= 0) { return RedirectToAction("Index"); } var result = repository.GetPhone(id); // 处理查无数据的场景 if(result == null) { return HttpNotFound("指定商品不存在"); } return View(result); }
2. 修正索引页的链接生成逻辑
检查索引页中生成详情链接的代码,确保路由参数id绑定当前遍历的商品Id字段,参考正确写法:
@foreach (var phone in Model.PhoneList) { <!-- 确保此处的id赋值为当前商品的Id属性 --> @Html.ActionLink("查看详情", "Details", new { id = phone.Id }) }
3. 数据查询层可选优化
给GetPhone方法增加前置参数校验,减少无效的数据库请求:
public PhoneModel GetPhone(int id) { if (id <= 0) { return null; } using(var context = new ElectronicsDataBaseEntities()) { return context.Phone .Where(x => x.Id == id) .Select(x => new PhoneModel() { Name = x.Name, Phonemodel = x.Model, DateReleased = x.DateReleased, Desicription = x.Desicription }) .FirstOrDefault(); } }
内容的提问来源于stack exchange,提问作者adam p
相关产品推荐
相关产品推荐

