批量操作VM

2019-04-04 17:41 更新

BaseBatchVM是框架中負(fù)責(zé)批量更新和刪除的VM,它本身繼承自BaseVM,同時它是一個組合VM,內(nèi)部包括了一個ListVM用來顯示批量操作的列表,以及一個BaseVM用來設(shè)置需要更新的字段

建立一個BaseBatchVM

建立一個BatchVM分兩步

1. 建立一個普通的VM用來設(shè)置需要批量更新的字段

2. 建立一個BatchVM并使用第一步建立的VM作為泛型變量

下面以學(xué)校的模型為例,演示如何建立一個BatchVM對學(xué)校數(shù)據(jù)進(jìn)行批量修改和刪除。學(xué)校模型的定義可以參考第一個模塊

  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 = "學(xué)校類型")]
  15. public SchoolTypeEnum? SchoolType { get; set; }
  16. }

以上代碼定義了一個簡單的BatchVM,用來批量修改學(xué)校類型這個字段,以及批量刪除學(xué)校數(shù)據(jù)

ListVM指向一個繼承自BasePagedListVM的類,負(fù)責(zé)顯示數(shù)據(jù)列表

LinkedVM指向一個繼承自BaseVM的類,負(fù)責(zé)指定需要更新的字段

使用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+"條數(shù)據(jù)被修改");
  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+"條數(shù)據(jù)被刪除");
  42. }
  43. }
  44. #endregion
  45. }

DoBatchEdit和DoBatchDelete是BatchVM中提供的函數(shù),用于進(jìn)行批量修改和刪除

必須使用CreateVM函數(shù)來創(chuàng)建ViewModel,而不要直接new。CreateVM函數(shù)會將當(dāng)前Controller的Session,ModelState等信息傳遞給VM,并進(jìn)行一些框架內(nèi)部的操作

FFResult是框架提供的一個輔助類,主要是方便開發(fā)人員返回常用js,比如關(guān)閉當(dāng)前窗口,刷新grid等

自定義驗證

BaseBatchVM繼承自BaseVM,所以一樣可以通過重寫Validate方法來實現(xiàn)復(fù)雜的自定義驗證

BatchVM定義了一個CheckIfCanDelete方法,重寫該方法可以在批量刪除時定義一些驗證邏輯

主要屬性
屬性
描述
ListVM
一個繼承自BasePagedListVM的類,負(fù)責(zé)輸出列表數(shù)據(jù)
LinkedVM
一個繼承自BaseVM的類,負(fù)責(zé)定義需要批量修改的字段
主要函數(shù)
函數(shù)
描述
DoBatchDelete()
進(jìn)行批量刪除
DoBatchEdit()
進(jìn)行批量修改。通過對比BatchVM中綁定Model中的字段和LinkedVM中定義的字段,如果有同名字段,則修改
CheckIfCanDelete()
批量刪除時的驗證條件,需要在在繼承類中重寫


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號