ASP.NET MVC下拉框提交后ViewBag存值为空问题求助
问题分析与解决方案
我帮你排查了下问题,核心原因出在Post请求返回视图时没有重新传递有效的模型,导致视图渲染下拉框时出错,进而掩盖了ViewBag的值展示,甚至让你误以为ViewBag赋值失败。
具体问题点
当你在save方法中执行return View("menu");时,没有给视图传递Employee模型,此时视图中的Model是null,Model.ser_code自然也是null,这会让@Html.DropDownListFor直接抛出异常,页面根本没机会渲染到展示ViewBag.scode的部分——所以你看到的ViewBag.scode为null,但实际上赋值操作是成功的,只是页面没走到展示它的步骤。
修复方案
修改你的save方法,重新构建并传递完整的Employee模型,同时可以把选中的值回显到下拉框中,提升用户体验:
[HttpPost] public ActionResult save(Employee emp) { RevenueDashboardEntities rdb = new RevenueDashboardEntities(); // 给ViewBag赋值选中的服务编码 ViewBag.scode = emp.Service_Code; // 重新构建模型,确保下拉框的数据源存在,同时回显用户选中的值 var model = new Employee() { ser_code = new SelectList(rdb.Services, "Service_Code", "Service_Name"), Service_Code = emp.Service_Code }; // 传递模型到menu视图,保证下拉框正常渲染 return View("menu", model); }
额外优化建议
- 可以把获取下拉框数据源的逻辑抽成单独方法,避免重复代码:
private IEnumerable<SelectListItem> GetServiceOptions() { using(var rdb = new RevenueDashboardEntities()) { return new SelectList(rdb.Services, "Service_Code", "Service_Name"); } }
之后在menu和save方法中直接调用GetServiceOptions()赋值ser_code即可。
- 建议用
using语句包裹数据库上下文,确保资源被正确释放,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Pritesh Naik
相关产品推荐
相关产品推荐

