You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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); 
}

额外优化建议

  1. 可以把获取下拉框数据源的逻辑抽成单独方法,避免重复代码:
private IEnumerable<SelectListItem> GetServiceOptions()
{
    using(var rdb = new RevenueDashboardEntities())
    {
        return new SelectList(rdb.Services, "Service_Code", "Service_Name");
    }
}

之后在menu和save方法中直接调用GetServiceOptions()赋值ser_code即可。

  1. 建议用using语句包裹数据库上下文,确保资源被正确释放,避免内存泄漏。

内容的提问来源于stack exchange,提问作者Pritesh Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:08:39