我想知道在View上填写 SelectList 时应该使用什么。我知道有两种方法可以做到这一点。 第一; 在控制器的get方法上设置ViewBag。
ViewBag.DepartmentList = new SelectList(_departmentService.GetAll(), "Id", "Name", selectedValue: user.DepartmentId);
然后在视图上使用它(你也可以使用ViewData)
@Html.DropDownListFor(model => model.DepartmentId, (IEnumerable<SelectListItem>)ViewBag.DepartmentList )
我知道的第二种方法是直接从view中调用service方法:
@Html.DropDownListFor(model=>model.DepartmentId,new SelectList((new DepartmentService()).GetAll(),"Id","Name", selectedValue: Model.DepartmentId ))
因此,有时我们应该返回查看控制器post方法上的传递模型到方法,尤其是存在错误或ModelState无效。如您所知,在执行此ViewBag.DepartmentList时应再次填充post方法。另一方面,使用第二种方式,不需要创建和填充ViewBag.DepartmentList get和post方法。但我想知道是否有任何差异或我应该使用哪一个?为什么呢?
答案 0 :(得分:2)
这两个选项都不是一个好方法。请考虑使用ViewModel。
答案 1 :(得分:0)
如上所述,使用视图模型来保存选择列表值
- DepartmentViewModel
[Required]
public int DepartmentId { get; set; }
public IEnumerable<SelectListItem> DepartmentSelectList { get; set; }
- DepartmentController
var vm = new DepartmentViewModel();
vm.DepartmentSelectList = new DepartmentService().GetAll().Select(c => new SelectListItem
{
Text = c.DepartmentName,
Value = c.Id.ToString()
}).ToList();
- 查看
@Html.DropDownListFor(model => model.DepartmentId, model.DepartmentSelectList)