數(shù)據(jù)操作VM

2019-04-04 17:40 更新

BaseCRUDVM是框架中負(fù)責(zé)增刪改的VM,它繼承自BaseVM,提供了標(biāo)準(zhǔn)的DoAdd,DoEdit,DoDelete函數(shù)

建立一個BaseCRUDVM

建立BaseCRUDVM非常簡單,只需要將關(guān)聯(lián)的Model作為泛型變量就可以了。下面以學(xué)校的模型為例,學(xué)校模型的定義可以參考第一個模塊

  1. public class SchoolVM : BaseCRUDVM<School>
  2. {
  3. }

是的,就是這么簡單,對于沒有附加要求的單表來說,只是繼承BaseCRUDVM就足夠了

使用BaseCRUDVM

在Controller中使用BaseCRUDVM的步驟也是一目了然,請看下面的例子

  1. [ActionDescription("學(xué)校管理")]
  2. public class SchoolController : BaseController
  3. {
  4. #region 新建
  5. [ActionDescription("新建")]
  6. public ActionResult Create()
  7. {
  8. var vm = CreateVM<SchoolVM>();
  9. return PartialView(vm);
  10. }
  11. [HttpPost]
  12. [ActionDescription("新建")]
  13. public ActionResult Create(SchoolVM vm)
  14. {
  15. if (!ModelState.IsValid)
  16. {
  17. return PartialView(vm);
  18. }
  19. else
  20. {
  21. vm.DoAdd();
  22. return FFResult().CloseDialog().RefreshGrid();
  23. }
  24. }
  25. #endregion
  26. #region 修改
  27. [ActionDescription("修改")]
  28. public ActionResult Edit(Guid id)
  29. {
  30. var vm = CreateVM<SchoolVM>(id);
  31. return PartialView(vm);
  32. }
  33. [ActionDescription("修改")]
  34. [HttpPost]
  35. public ActionResult Edit(SchoolVM vm)
  36. {
  37. if (!ModelState.IsValid)
  38. {
  39. return PartialView(vm);
  40. }
  41. else
  42. {
  43. vm.DoEdit();
  44. return FFResult().CloseDialog().RefreshGridRow(vm.Entity.ID);
  45. }
  46. }
  47. #endregion
  48. #region 刪除
  49. [ActionDescription("刪除")]
  50. public ActionResult Delete(Guid id)
  51. {
  52. var vm = CreateVM<SchoolVM>(id);
  53. return PartialView(vm);
  54. }
  55. [ActionDescription("刪除")]
  56. [HttpPost]
  57. public ActionResult Delete(Guid id, IFormCollection nouse)
  58. {
  59. var vm = CreateVM<SchoolVM>(id);
  60. vm.DoDelete();
  61. if (!ModelState.IsValid)
  62. {
  63. return PartialView(vm);
  64. }
  65. else
  66. {
  67. return FFResult().CloseDialog().RefreshGrid();
  68. }
  69. }
  70. #endregion
  71. #region 詳細(xì)
  72. [ActionDescription("詳細(xì)")]
  73. public ActionResult Details(Guid id)
  74. {
  75. var vm = CreateVM<SchoolVM>(id);
  76. return PartialView(vm);
  77. }
  78. #endregion
  79. }

必須使用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等

自定義驗證

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

同時,對于使用比較多的字段唯一性的驗證,BaseCRUDVM提供了一個更方便的方式,重寫SetDuplicatedCheck方法

下面的例子擴充了SchoolVM,加入了唯一性的驗證,SchoolCode和SchoolName兩個字段都不能重復(fù)

  1. public class SchoolVM : BaseCRUDVM<School>
  2. {
  3. public override DuplicatedInfo<School> SetDuplicatedCheck()
  4. {
  5. var rv = CreateFieldsInfo(SimpleField(x => x.SchoolCode));
  6. rv.AddGroup(SimpleField(x => x.SchoolName));
  7. return rv;
  8. }
  9. }

框架同時支持組合字段的唯一性驗證,比如下面的例子,SchoolName和SchoolType兩個字段組合起來不能重復(fù),同時SchoolCode也不能重復(fù)

  1. public class SchoolVM : BaseCRUDVM<School>
  2. {
  3. public override DuplicatedInfo<School> SetDuplicatedCheck()
  4. {
  5. var rv = CreateFieldsInfo(SimpleField(x => x.SchoolName),SimpleField(x => x.SchoolType));
  6. rv.AddGroup(SimpleField(x => x.SchoolCode));
  7. return rv;
  8. }
  9. }
主要函數(shù)
函數(shù)
描述
DoAdd()
數(shù)據(jù)庫添加操作
DoEdit(bool updateAllFields = false)
數(shù)據(jù)庫修改操作,updateAllFields默認(rèn)為false,只修改Post回來的字段,如果updateAllFields為true,將修改所有字段
DoDelete()
數(shù)據(jù)庫刪除操作,對于繼承自PersistPoco的模型,會把IsValid字段設(shè)為false,從而進(jìn)行假刪除
DoRealDelete()
無論是否繼承自PersistPoco,都進(jìn)行刪除
GetById(Guid Id)
根據(jù)Id獲取Model
SetInclude(params Expression<Func<TModel, object>>[] exps)
設(shè)置默認(rèn)關(guān)聯(lián)的表,一般在構(gòu)造函數(shù)中調(diào)用,然后在GetById中會自動關(guān)聯(lián)設(shè)置的表

DoAdd,DoEdit,DoDelete,DoRealDelete都有默認(rèn)實現(xiàn),對于更加復(fù)雜的邏輯,可以重寫這些方法


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號