WTM框架即WalkingTec.Mvvm框架,最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。经历了四年间数十个项目的考验,框架逐步的完善,推出了四个主要版本。是目前.net core上我目前遇到的最好的低代码开发平台,我目前使用LayUI前端和.net core 6.0后台。
目前遇到一个普遍的问题,遍历WTM官网及其他搜索结果并没有满意的答案,于是自己尝试着解决了下,供其他人参考。该问题描述如下:在一个WTM实体类的标准维护界面(由代码生成器构建),如何弹窗列表显示其他实体类的列表,并可勾选其他实体类的列表数据,将所勾选列表数据的ID集合传到后端用于处理。举例来说,有一个商务合同列表,列表中的每条商务合同记录对应着若干产品包,点击产品包弹框显示产品包列表,已勾选表明当前商务合同已选择该产品包,未勾选表明当前商务合同未选择该产品包,用户可通过勾选或取消勾选维护当前商务合同包含的产品包。
那么问题来了,由于WTM框架封装的太好了,导致并没有特定的类处理该问题。尤其是勾选的记录的ID集合无法通过框架既有类方法获取,因此只能自己写JavaScript脚本将勾选ID获取并通过cookie传给后台。由于WTM的列表是通过BasePagedListVM的派生类统一维护的,因此我们首先要在商务合同对应的BasePagedListVM的派生类中定义产品包按钮,便于调出产品包列表弹窗。
上面定义是说,在商务合同的列表上会显示一个名为“产品包”的按钮,点击它会穿入对应商务合同的ID,交由BizContractController中的Hook方法处理,该方法对应一个Hook.cshtml的前端页面。
如上图,Hook.cshtml与Create.cshtml一样使用BaseCRUDVM的派生类BizContractVM,在BizContractVM中定义一个产品包BasePagedListVM的派生类ContractPackageListVM用于在Hook.cshtml中处理grid对应列表封装类,包括各列的显示配置。在提交按钮点击时,调用onclick方法绑定的脚本方法获取LayUI表格已勾选的数据,然后将已勾选数据的ID用下划线“_”连接(用逗号会在传入后台时因为逗号分隔导致只能传第一个ID,故用下划线代替),最后将ID集合字符串ids写入cookie传入后台。在对应BizContractController方法中获取传入的ID集合字符串处理。
这样,我们就解决了WTM框架弹框列表选择数据后,所选ID集合传入后台处理的问题。