批量操作VM

2019-04-04 17:41 更新

BaseBatchVM是框架中负责批量更新和删除的VM,它本身继承自BaseVM,同时它是一个组合VM,内部包括了一个ListVM用来显示批量操作的列表,以及一个BaseVM用来设置需要更新的字段

建立一个BaseBatchVM

建立一个BatchVM分两步

1. 建立一个普通的VM用来设置需要批量更新的字段

2. 建立一个BatchVM并使用第一步建立的VM作为泛型变量

下面以学校的模型为例,演示如何建立一个BatchVM对学校数据进行批量修改和删除。学校模型的定义可以参考第一个模块

  1. public class SchoolBatchVM : BaseBatchVM<School, School_BatchEdit>
  2. {
  3. public SchoolBatchVM()
  4. {
  5. ListVM = new SchoolListVM();
  6. LinkedVM = new School_BatchEdit();
  7. }
  8. }
  9. ///
  10. /// 批量编辑字段类
  11. ///
  12. public class School_BatchEdit : BaseVM
  13. {
  14. [Display(Name = "学校类型")]
  15. public SchoolTypeEnum? SchoolType { get; set; }
  16. }

以上代码定义了一个简单的BatchVM,用来批量修改学校类型这个字段,以及批量删除学校数据

ListVM指向一个继承自BasePagedListVM的类,负责显示数据列表

LinkedVM指向一个继承自BaseVM的类,负责指定需要更新的字段

使用BaseBatchVM

在Controller中使用BatchVM和使用其他VM是一样的,请看下面的例子

  1. #region 批量修改
  2. [HttpPost]
  3. [ActionDescription("批量修改")]
  4. public ActionResult BatchEdit(Guid[] IDs)
  5. {
  6. var vm = CreateVM<SchoolBatchVM>(Ids: IDs);
  7. return PartialView(vm);
  8. }
  9. [HttpPost]
  10. [ActionDescription("批量修改")]
  11. public ActionResult DoBatchEdit(SchoolBatchVM vm, IFormCollection nouse)
  12. {
  13. if (!ModelState.IsValid || !vm.DoBatchEdit())
  14. {
  15. return PartialView("BatchEdit",vm);
  16. }
  17. else
  18. {
  19. return FFResult().RefreshGrid().CloseDialog().Alert("操作成功,共有"+vm.Ids.Length+"条数据被修改");
  20. }
  21. }
  22. #endregion
  23. #region 批量删除
  24. [HttpPost]
  25. [ActionDescription("批量删除")]
  26. public ActionResult BatchDelete(Guid[] IDs)
  27. {
  28. var vm = CreateVM<SchoolBatchVM>(Ids: IDs);
  29. return PartialView(vm);
  30. }
  31. [HttpPost]
  32. [ActionDescription("批量删除")]
  33. public ActionResult DoBatchDelete(SchoolBatchVM vm, IFormCollection nouse)
  34. {
  35. if (!ModelState.IsValid || !vm.DoBatchDelete())
  36. {
  37. return PartialView("BatchDelete",vm);
  38. }
  39. else
  40. {
  41. return FFResult().RefreshGrid().CloseDialog().Alert("操作成功,共有"+vm.Ids.Length+"条数据被删除");
  42. }
  43. }
  44. #endregion
  45. }

DoBatchEdit和DoBatchDelete是BatchVM中提供的函数,用于进行批量修改和删除

必须使用CreateVM函数来创建ViewModel,而不要直接new。CreateVM函数会将当前Controller的Session,ModelState等信息传递给VM,并进行一些框架内部的操作

FFResult是框架提供的一个辅助类,主要是方便开发人员返回常用js,比如关闭当前窗口,刷新grid等

自定义验证

BaseBatchVM继承自BaseVM,所以一样可以通过重写Validate方法来实现复杂的自定义验证

BatchVM定义了一个CheckIfCanDelete方法,重写该方法可以在批量删除时定义一些验证逻辑

主要属性
属性
描述
ListVM
一个继承自BasePagedListVM的类,负责输出列表数据
LinkedVM
一个继承自BaseVM的类,负责定义需要批量修改的字段
主要函数
函数
描述
DoBatchDelete()
进行批量删除
DoBatchEdit()
进行批量修改。通过对比BatchVM中绑定Model中的字段和LinkedVM中定义的字段,如果有同名字段,则修改
CheckIfCanDelete()
批量删除时的验证条件,需要在在继承类中重写


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号