POST Action验证后Modal工作异常、SelectLists无法加载问题
修复方案
后端代码问题修复
1. 下拉框数据源错误
库存校验失败的else分支中,司机下拉框ViewBag.DriverId错误绑定了产品表作为数据源,应该统一使用用户表:
// 原错误代码 ViewBag.DriverId = new SelectList(db.Products.ToList(), model.DriverId); // 修改为 ViewBag.DriverId = new SelectList(db.Users.ToList(), model.DriverId);
2. SelectList构造参数错误
所有SelectList初始化都缺少值字段、显示字段两个必填参数,导致下拉框无法正常渲染:
// 原错误写法 ViewBag.ProductId = new SelectList(db.Products.ToList(), model.ProductId); // 修改为,第二个参数为选项值对应的表字段名,第三个为选项显示文本对应的表字段名,替换为你实际的字段名即可 ViewBag.ProductId = new SelectList(db.Products.ToList(), "Id", "ProductName", model.ProductId); ViewBag.DriverId = new SelectList(db.Users.ToList(), "Id", "UserName", model.DriverId);
前端Modal异常修复
错误返回后样式丢失是提交逻辑问题:
- Modal内的表单必须用Ajax异步提交,拿到后台返回的局部视图内容后,直接替换Modal内的表单容器,不能做页面跳转或者全页替换,否则会丢失Modal的外层结构和样式。
- 替换局部内容后,重新初始化表单验证组件,保证错误提示可以正常显示。
冗余代码优化(可选)
你当前代码在ModelState.IsValid判断内外重复写了ViewBag赋值逻辑,可以把这部分逻辑统一提到最后,只在库存校验失败的分支添加错误提示即可,减少重复代码。
内容的提问来源于stack exchange,提问作者Ahmed Naeem
相关产品推荐
相关产品推荐

