批量操作VM
BaseBatchVM是框架中负责批量更新和删除的VM,它本身继承自BaseVM,同时它是一个组合VM,内部包括了一个ListVM用来显示批量操作的列表,以及一个BaseVM用来设置需要更新的字段
建立一个BaseBatchVM建立一个BatchVM分两步
1. 建立一个普通的VM用来设置需要批量更新的字段
2. 建立一个BatchVM并使用第一步建立的VM作为泛型变量
下面以学校的模型为例,演示如何建立一个BatchVM对学校数据进行批量修改和删除。学校模型的定义可以参考第一个模块
- public class SchoolBatchVM : BaseBatchVM<School, School_BatchEdit>
- {
- public SchoolBatchVM()
- {
- ListVM = new SchoolListVM();
- LinkedVM = new School_BatchEdit();
- }
- }
- ///
- /// 批量编辑字段类
- ///
- public class School_BatchEdit : BaseVM
- {
- [Display(Name = "学校类型")]
- public SchoolTypeEnum? SchoolType { get; set; }
- }
-
以上代码定义了一个简单的BatchVM,用来批量修改学校类型这个字段,以及批量删除学校数据
ListVM指向一个继承自BasePagedListVM的类,负责显示数据列表
LinkedVM指向一个继承自BaseVM的类,负责指定需要更新的字段
在Controller中使用BatchVM和使用其他VM是一样的,请看下面的例子
- #region 批量修改
- [HttpPost]
- [ActionDescription("批量修改")]
- public ActionResult BatchEdit(Guid[] IDs)
- {
- var vm = CreateVM<SchoolBatchVM>(Ids: IDs);
- return PartialView(vm);
- }
- [HttpPost]
- [ActionDescription("批量修改")]
- public ActionResult DoBatchEdit(SchoolBatchVM vm, IFormCollection nouse)
- {
- if (!ModelState.IsValid || !vm.DoBatchEdit())
- {
- return PartialView("BatchEdit",vm);
- }
- else
- {
- return FFResult().RefreshGrid().CloseDialog().Alert("操作成功,共有"+vm.Ids.Length+"条数据被修改");
- }
- }
- #endregion
- #region 批量删除
- [HttpPost]
- [ActionDescription("批量删除")]
- public ActionResult BatchDelete(Guid[] IDs)
- {
- var vm = CreateVM<SchoolBatchVM>(Ids: IDs);
- return PartialView(vm);
- }
- [HttpPost]
- [ActionDescription("批量删除")]
- public ActionResult DoBatchDelete(SchoolBatchVM vm, IFormCollection nouse)
- {
- if (!ModelState.IsValid || !vm.DoBatchDelete())
- {
- return PartialView("BatchDelete",vm);
- }
- else
- {
- return FFResult().RefreshGrid().CloseDialog().Alert("操作成功,共有"+vm.Ids.Length+"条数据被删除");
- }
- }
- #endregion
- }
-
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() | 批量删除时的验证条件,需要在在继承类中重写 |