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
相关产品推荐
相关产品推荐

