批量操作VM

2019-04-04 17:41 更新

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

建立一個(gè)BaseBatchVM

建立一個(gè)BatchVM分兩步

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

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

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

  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. /// 批量編輯字段類(lèi)
  11. ///
  12. public class School_BatchEdit : BaseVM
  13. {
  14. [Display(Name = "學(xué)校類(lèi)型")]
  15. public SchoolTypeEnum? SchoolType { get; set; }
  16. }

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

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

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

使用BaseBatchVM

在Controller中使用BatchVM和使用其他VM是一樣的,請(qǐng)看下面的例子

  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ù)來(lái)創(chuàng)建ViewModel,而不要直接new。CreateVM函數(shù)會(huì)將當(dāng)前Controller的Session,ModelState等信息傳遞給VM,并進(jìn)行一些框架內(nèi)部的操作

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

自定義驗(yàn)證

BaseBatchVM繼承自BaseVM,所以一樣可以通過(guò)重寫(xiě)Validate方法來(lái)實(shí)現(xiàn)復(fù)雜的自定義驗(yàn)證

BatchVM定義了一個(gè)CheckIfCanDelete方法,重寫(xiě)該方法可以在批量刪除時(shí)定義一些驗(yàn)證邏輯

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)