如何为数据编辑功能创建月份下拉列表?
解决编辑场景下的月份下拉列表问题
别担心,这个问题的解决思路和你新增场景的逻辑几乎一致,只需要复用你已经写好的下拉列表生成逻辑,再调整视图代码就行,我来给你详细说明:
1. 在编辑控制器Action中生成月份列表
不管是新增还是编辑,下拉列表的选项都是1-12月,所以你可以把生成月份列表的代码抽成一个私有方法,这样新增和编辑Action都能复用,避免重复代码。当然你也可以直接在编辑Action里复制那段循环代码,抽方法只是更优雅的做法:
// 抽成私有方法,方便复用 private void PopulateMonthsSelectList() { var monthList = new List<int>(); for (int i = 1; i <= 12; i++) { monthList.Add(i); } ViewBag.listaMesec = new SelectList(monthList); } // 编辑Action示例 public ActionResult Edit(int id) { // 你的数据读取逻辑,比如用SqlDataAdapter获取model var model = new YourModel(); // 这里是你原来的赋值代码 model.mesec = dt.Rows[0][3] != DBNull.Value ? Convert.ToInt32(dt.Rows[0][3]) : 0; // 调用方法生成月份下拉列表 PopulateMonthsSelectList(); return View(model); } // 新增Action也可以用这个方法,保持代码一致 public ActionResult Create() { PopulateMonthsSelectList(); return View(); }
2. 修改编辑视图的下拉列表代码
把你当前编辑视图里的EditorFor替换成和新增视图一样的DropDownListFor就可以了。MVC会自动根据model.mesec的值,在下拉列表中选中对应的月份,完全不用手动处理选中状态:
@Html.DropDownListFor(model => model.mesec, ViewBag.listaMesec as SelectList, "Izaberite mesec", new { @class = "form-control"})
为什么这样可行?
当你把带有mesec值的model传递给视图,同时ViewBag里有对应的SelectList时,DropDownListFor会自动匹配model中的值和SelectList里的选项,自动设置选中状态,完美适配编辑场景的需求。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

