在 View 上使用 ViewBag 或调用服务方法
Using ViewBag or calling service method on View
我想知道在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 )
我知道的第二种方法是直接从视图调用服务方法:
@Html.DropDownListFor(model=>model.DepartmentId,new SelectList((new DepartmentService()).GetAll(),"Id","Name", selectedValue: Model.DepartmentId ))
因此,有时我们应该 return 查看将模型传递给控制器上的方法 post 方法,尤其是出现错误或 ModelState 无效时。如您所知,执行此操作时 ViewBag.DepartmentList 应该再次填充 post 方法。另一方面,使用第二种方式,不需要创建和填充 ViewBag.DepartmentList get 和 post 方法。但我想知道是否有任何区别或者我应该使用哪一个?为什么?
这两个选项都不是一个好方法。考虑改用 ViewModel。
如前所述,使用视图模型来保存 select 列表值
--DepartmentViewModel
[Required]
public int DepartmentId { get; set; }
public IEnumerable<SelectListItem> DepartmentSelectList { get; set; }
--部门主管
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)
我想知道在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 )
我知道的第二种方法是直接从视图调用服务方法:
@Html.DropDownListFor(model=>model.DepartmentId,new SelectList((new DepartmentService()).GetAll(),"Id","Name", selectedValue: Model.DepartmentId ))
因此,有时我们应该 return 查看将模型传递给控制器上的方法 post 方法,尤其是出现错误或 ModelState 无效时。如您所知,执行此操作时 ViewBag.DepartmentList 应该再次填充 post 方法。另一方面,使用第二种方式,不需要创建和填充 ViewBag.DepartmentList get 和 post 方法。但我想知道是否有任何区别或者我应该使用哪一个?为什么?
这两个选项都不是一个好方法。考虑改用 ViewModel。
如前所述,使用视图模型来保存 select 列表值
--DepartmentViewModel
[Required]
public int DepartmentId { get; set; }
public IEnumerable<SelectListItem> DepartmentSelectList { get; set; }
--部门主管
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)