以Model为核心的表单设计器的思路
在之前的文章中介绍过一些表单设计器的思路和想法。在上一篇文章:零代码平台实现中说到我要实现一个功能强大的表单设计工具。经过几天思考,觉得以Model为核心去实现表单设计器思路既简单也很清楚。这篇文章我将谈谈如何以Model为核心去实现表单设计器。
设计思路:
之所以会我想到以Model为核心,主要借鉴Asp.net MVC框架。ASP.NET MVC中控制器向View提供Model。View将Model渲染成表单。有一点不好的是生成的View中夹杂了HTML和C#代码,没有了ASP.Net Web Form的用户控件,所以就不能去可视化拖拽了,看下面ASP.net MVC生成表单的两张图。
简单的List页面:
Detail页面:
从上图中可以看出不存在控件,那就不能可视化的拖拽。
我做这个设计器的目的之一就是解决这个不能拖拽的问题,先对比一下asp.net表单生成机制和我的表单设计器的机制:
从上图可以看出两种机制是差不多的。
mvc中有ModeL和ViewModel两个概念。Model是一般都固定不变的,编译之后就会存在dll,所以通过下面代码使用反射来生成表单。
2 dlg.AutoUpgradeEnabled =false;
3 if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
4 {
5 string fileName = dlg.FileName;
6 txtPath.Text = fileName;
7 System.Reflection.Assembly ass;
8 Type[] types;
9 ass = System.Reflection.Assembly.LoadFile(fileName);//要绝对路径
10 //获取所以的实体类
11 types = ass.GetTypes();
12 foreach(Type type in types)
13 {
14 ListBoxItem li =new ListBoxItem();
15 li.Content = type.Namespace+"."+type.Name;
16 lbxModel.Items.Add(li);
17
18 }
19
20
21
22 }
对于ViewModel,我计划先使用SQL语句生成ViewModel的结构和代码,然后生表单。
Model方式界面:
ViewModel方式界面:
简单示例:
看个例子,实体类代码如下:
2 {
3 publicstring Name
4 {
5 get;
6 set;
7 }
8
9 publicint Age
10 {
11 get;
12 set;
13 }
14
15 publicstring Sex
16 {
17 get;
18 set;
19 }
20 }
在List页面,我生成一个固定的Grid和以下常用的工具栏按钮如:新增、修改、删除...,如下如。
对于修改页面、详情页面等,我生成label+textbox组合方式的表单。
下面我们就可以自由调整界面了:
调整之后的一级界面
调整之后的二级界面
最后通过代码生成机制生成aspx代码。
总结:这个是我思考出的一个表单设计器的解决方案,感觉比较简单而且比较通用,故写这篇文章做为一个分享。考虑不周的地方期待大家多多指正。
(全文完)
以下为广告部分
您部署的HTTPS网站安全吗?
如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!
快速了解HTTPS网站安全情况。
安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。
安装部署SSL证书变得更方便。
SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。
让服务器远离SSL证书漏洞侵扰
TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。