为何If条件失效,无法调用注入的_sysautoController?
问题分析
你当前的代码只检查了传入的Model.Reference是否为空字符串,但没有验证数据库中是否已存在该Reference,这就导致如果用户传入了一个数据库里不存在的Reference,代码也不会触发自动生成逻辑,和你想要的“数据库未找到则生成”需求不符。
修正方案
要实现需求,你需要在判断条件里同时做两件事:
- 检查Model.Reference是否为空/空白字符串
- 检查数据库中是否不存在对应Reference的记录
修正后的代码示例
[HttpPost] public IActionResult ConfirmDetails(RTSLIST Model) { if (ModelState.IsValid) { // 判断:Reference为空/空白,或者数据库中找不到该Reference的记录 bool shouldGenerateReference = string.IsNullOrWhiteSpace(Model.Reference) || !_dbContext.RTSLIST.Any(r => r.Reference == Model.Reference); if (shouldGenerateReference) { // 调用生成方法,务必将生成结果赋值给Model.Reference Model.Reference = _sysautoController.Index(1, Model.IdNo); } // 根据业务场景,将修改后的Model保存到数据库 _dbContext.RTSLIST.Update(Model); // 新增场景用Add,更新场景用Update _dbContext.SaveChanges(); } return View(Model); // 返回对应视图或结果 }
关键注意点
- 用
string.IsNullOrWhiteSpace代替string.IsNullOrEmpty,能同时过滤全空白字符的情况 - 必须添加数据库查询逻辑
!_dbContext.RTSLIST.Any(...)来验证Reference是否存在 - 调用生成方法后,一定要把生成的Reference赋值给
Model.Reference,否则生成的ID不会被持久化 - 最后记得执行数据库保存操作,确保修改生效
内容的提问来源于stack exchange,提问作者YoR
相关产品推荐
相关产品推荐

