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

ASP.NET MVC中DropDownList点击后选中值无法保留问题求助

问题分析与解决方法

你的代码存在三个核心问题,导致下拉框选中值无法保留:


1. ViewBag键名与下拉框名称完全不匹配

控制器中赋值的是ViewBag.NewsCategoriesID,但视图里下拉框用的是"Students"和ViewBag.students,两者毫无关联,下拉框根本没有加载正确的选项列表。

2. 表单提交目标错误

视图中的表单提交到Home/Index,但你处理编辑逻辑的Action是NewsEdit,回发后没有进入正确的处理方法,无法接收和保留用户选中的值。

3. 未处理回发时的用户输入

当前控制器每次都直接从数据库读取原始的dsn.NewsCategoriesID,完全忽略了用户提交的新选中值,导致页面刷新后回到初始状态。


修正后的代码

控制器代码

public ActionResult NewsEdit(int ID, dms_New dsn) 
{
    // 若不是回发(首次加载),从数据库读取原始数据;回发时保留用户提交的模型值
    if (!ModelState.IsValid)
    {
        dsn = dc.dms_News.FirstOrDefault(a => a.NewsID == ID);
    }
    
    // 获取分类列表
    var categories = dc.dms_NewsCategories.ToList();
    // 构建SelectList,选中值使用当前模型的NewsCategoriesID(回发时是用户选择的值)
    ViewBag.NewsCategoriesID = new SelectList(categories, "NewsCategoriesID", "NewsCategoriesName", dsn.NewsCategoriesID);
    
    return View(dsn);
}

视图代码

@model dms_New

@using (Html.BeginForm("NewsEdit", "你的控制器名称", new { ID = Model.NewsID }, FormMethod.Post))
{
    <div>
        <!-- 使用强类型绑定,直接关联模型的NewsCategoriesID属性 -->
        @Html.DropDownListFor(m => m.NewsCategoriesID, (SelectList)ViewBag.NewsCategoriesID, "--请选择分类--", new { @class = "form-control" })
        @Html.ValidationMessageFor(m => m.NewsCategoriesID)
    </div>
    <input type="submit" value="保存" id="Submit" class="btn btn-default" />
}

额外注意事项

  • 确保dms_New类包含NewsCategoriesID属性,否则模型绑定无法接收下拉框的选中值。
  • 使用DropDownListFor而非DropDownList是更可靠的方式,它直接绑定到模型属性,避免名称不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 03:20:19