分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

基于FineUIMVC的代码生成器(传统三层)v1.0-2

发布时间:2023-09-06 01:39责任编辑:白小东关键词:MVC

第一篇博客只是粗略说明了一下,其实这个工具真正用话可能大家还要细看下,我今天(连夜)写个例子,截几个图,做一下自定义模板的实例教程,因为代码生成本身是个工具,动画效果都是次要的,主要是工具本身,其中自带的模板并不适合所有开发环境,所以还是侧重模板编写和接口。

前面说到我要写个MVC前台的模板按表生成 Index.cshtml 和 Controller.cs,所以就那这两个做个例子。说到模板就是一个制式的文件,我要先做错一个标准文件作为模板,然后根据不同表生成自己的文件, 其实大家都是程序员说这都是废话,博客比较长,说明的比较细,截图多,最下面有源码
环境准备,我先搭了一个FineUI的空项目 CodeFDemo
用生成工具生成了 asset_a2 表的后台三层
 
添加到项目,生成,该表是一个资产分类表
 

第一步 做一个模板的真实页面

准备工作做完,再做一个前台展示页面,以此为标准制作模板文件
Index.cshtml
 
@{ ???ViewBag.Title = "Index"; ???var F = Html.F();}@section head {}@section body { ???@( ????????F.Panel() ????????.IsViewPort(true) ????????.ShowBorder(false) ????????.ShowHeader(false) ????????.Layout(LayoutType.Region) ????????.Items( ????????????//中间Panel 查询和列表 ????????????F.Panel() ????????????//.IsViewPort(true) ????????????.BoxFlex(4) ????????????.Layout(LayoutType.VBox) ????????????.BodyPadding(0)//5 ????????????.BoxConfigChildMargin("0 0 0 0")//0 0 5 0 ????????????.ShowBorder(false) ????????????.ShowHeader(false) ????????????.Items( ????????????????//查询表单 ????????????????F.Form() ????????????????.ID("searchForm").Title("查询条件") ????????????????.BodyPadding(5).BoxConfigChildMargin("0 5 0 5").BoxFlex(1) ????????????????.Layout(LayoutType.VBox) ????????????????.BoxConfigAlign(BoxLayoutAlign.Stretch).BoxConfigPosition(BoxLayoutPosition.Center) ????????????????.EnableCollapse(true) ????????????????.LabelWidth(100) ????????????????.RowsEx(4, ????????????????????F.TextBox() ????????????????????????.ID("txtstr20") ????????????????????????.Attribute("data", "SYS_ASSET_A1_160") ????????????????????????.Label("分类名称") ????????????????????????.EmptyText("分类名称"), ????????????????????F.TextBox() ????????????????????????.ID("txtstr20") ????????????????????????.Attribute("data", "SYS_ASSET_A1_160") ????????????????????????.Label("分类编号") ????????????????????????.EmptyText("分类编号") ????????????????) ????????????????, ????????????????//列表 ????????????????F.Grid() ????????????????.Title("列表") ????????????????.ID("Grid1") ????????????????.BoxFlex(6) ????????????????.EnableCheckBoxSelect(true) ????????????????.DataIDField("ASSET_A2_AUTOID") ????????????????.AllowPaging(true) ????????????????.EnableHeaderMenu(false) ????????????????.PageSize(15) ????????????????.Toolbars( ????????????????????F.Toolbar().Items( ????????????????????????????F.DefaultGridBtn("Grid1") ????????????????????????) ????????????????????) ????????????????.Columns( ????????????????????????F.RowNumberField(), ????????????????????????F.RenderField() ????????????????????????????.HeaderText("ID") ????????????????????????????.Hidden(true) ????????????????????????????.DataField("ASSET_A2_AUTOID"), ????????????????????????F.RenderField() ????????????????????????????.HeaderText("分类名称") ????????????????????????????.ExpandUnusedSpace(true) ????????????????????????????.DataField("ASSET_A2_10"), ????????????????????????F.RenderField() ????????????????????????????.HeaderText("分类编号") ????????????????????????????.ExpandUnusedSpace(true) ????????????????????????????.DataField("ASSET_A2_20"), ????????????????????????F.RenderField() ????????????????????????????.HeaderText("新增时间") ????????????????????????????.ExpandUnusedSpace(true) ????????????????????????????.DataField("ASSET_A2_MAKETIME") ????????????????????????) ????????????????.DataSource(ViewBag.griddata) ????????????????//.Listener("rowclick", "OnGrid1RowClick") ????????????????) ????????????) ???)}@section script {<script> ???????F.ready(function () { ???????}) ???????//列表行点击事件 ???????function OnGrid1RowClick(e, rowid) { ???????????F.doPostBack(‘@Url.Action("Grid1_RowClick")‘, { ???????????????rowid: rowid, ???????????????fields: F.ui.Grid1.fields ???????????}); ???????} ???????//列表新增 ???????function Grid1new_Click() { ???????????F.ui.Grid1.showEdit();//新增 ???????} ???????//列表修改 得到列表选中项 getSelectedRows 注意DataIDField属性 ???????function Grid1edit_Click(g,rowid) { ???????????F.ui.Grid1.showEdit(true);//修改 ???????} ???????//删除 删除此方法自动回发Grid1Del_Click 方法 参数为 id fields ???????function Grid1delete_Click(g,ids) { ???????} ???????//刷新列表 ???????function lodeGrid() { ???????????F.doPostBack(‘@Url.Action("lodeGrid")‘, { ???????????????fields: F.ui.Grid1.fields ???????????}); ???????}</script>}

asset_a2Controller.cs

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using CodeFDemo.BP;namespace CodeFDemo.Controllers.sysApp{ ???public class asset_a2Controller : Controller ???{ ???????// GET: sysA1 ???????public ActionResult Index() ???????{ ???????????BLLasset_a2 bll = new BLLasset_a2(); ???????????ViewBag.griddata = bll.Getasset_a2MsByQuery(new Message.MsQuery()).ToArray(); ???????????return View(); ???????} ???}}

 OK,浏览下(本实例只做列表展示)

第二步 将标准文件改写为模板文件

再看下代码,其中Grid的Columns是列的循环,查询条件也是列的循环,数据库表格的列一循环就可以了
所以就有了两个模板
@{ ???ViewBag.Title = "Index"; ???var F = Html.F();}@section head {}@section body { ???@( ????????F.Panel() ????????.IsViewPort(true) ????????.ShowBorder(false) ????????.ShowHeader(false) ????????.Layout(LayoutType.Region) ????????.Items( ????????????//中间Panel 查询和列表 ????????????F.Panel() ????????????//.IsViewPort(true) ????????????.BoxFlex(4) ????????????.Layout(LayoutType.VBox) ????????????.BodyPadding(0)//5 ????????????.BoxConfigChildMargin("0 0 0 0")//0 0 5 0 ????????????.ShowBorder(false) ????????????.ShowHeader(false) ????????????.Items( ????????????????//查询表单 ????????????????F.Form() ????????????????.ID("searchForm").Title("查询条件") ????????????????.BodyPadding(5).BoxConfigChildMargin("0 5 0 5").BoxFlex(1) ????????????????.Layout(LayoutType.VBox) ????????????????.BoxConfigAlign(BoxLayoutAlign.Stretch).BoxConfigPosition(BoxLayoutPosition.Center) ????????????????.EnableCollapse(true) ????????????????.LabelWidth(100) ????????????????.RowsEx(4 ????????????????????$$TextBoxForSearch$$ ????????????????) ????????????????, ????????????????//列表 ????????????????F.Grid() ????????????????.Title("列表") ????????????????.ID("Grid1") ????????????????.BoxFlex(6) ????????????????.EnableCheckBoxSelect(true) ????????????????.DataIDField("$$KEY$$") ????????????????.AllowPaging(true) ????????????????.EnableHeaderMenu(false) ????????????????.PageSize(15) ????????????????.Toolbars( ????????????????????F.Toolbar().Items( ????????????????????????????F.DefaultGridBtn("Grid1") ????????????????????????) ????????????????????) ????????????????.Columns( ????????????????????????F.RowNumberField(), ????????????????????????F.RenderField() ????????????????????????????.HeaderText("ID") ????????????????????????????.Hidden(true) ????????????????????????????.DataField("$$KEY$$") ????????????????????????$$GridColumns$$ ????????????????????????) ????????????????.DataSource(ViewBag.griddata) ????????????????//.Listener("rowclick", "OnGrid1RowClick") ????????????????) ????????????) ???)}@section script {<script> ???????F.ready(function () { ???????}) ???????//列表行点击事件 ???????function OnGrid1RowClick(e, rowid) { ???????????F.doPostBack(‘@Url.Action("Grid1_RowClick")‘, { ???????????????rowid: rowid, ???????????????fields: F.ui.Grid1.fields ???????????}); ???????} ???????//列表新增 ???????function Grid1new_Click() { ???????????F.ui.Grid1.showEdit();//新增 ???????} ???????//列表修改 得到列表选中项 getSelectedRows 注意DataIDField属性 ???????function Grid1edit_Click(g,rowid) { ???????????F.ui.Grid1.showEdit(true);//修改 ???????} ???????//删除 删除此方法自动回发Grid1Del_Click 方法 参数为 id fields ???????function Grid1delete_Click(g,ids) { ???????} ???????//刷新列表 ???????function lodeGrid() { ???????????F.doPostBack(‘@Url.Action("lodeGrid")‘, { ???????????????fields: F.ui.Grid1.fields ???????????}); ???????}</script>}
 ???????????????????,F.TextBox() ????????????????????????.ID("txt$$ColunName$$") ????????????????????????.Attribute("data", "$$ColunName$$") ????????????????????????.Label("$$ColunNotes$$") ????????????????????????.EmptyText("$$ColunNotes$$")
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using $$namespace$$.BP;namespace $$namespace$$.Controllers.sysApp{ ???public class $$tablename$$Controller : Controller ???{ ???????// GET: sysA1 ???????public ActionResult Index() ???????{ ???????????BLL$$tablename$$ bll = new BLL$$tablename$$(); ???????????ViewBag.griddata = bll.Get$$tablename$$MsByQuery(new Message.MsQuery()).ToArray(); ???????????return View(); ???????} ???}}
其中$$namespace$$ $$tablename$$ $$KEY$$ $$ColunName$$ $$ColunNotes$$ 都是系统默认字典。
 
多了两个自定义字典$$TextBoxForSearch$$和$$GridColumns$$,其中$$TextBoxForSearch$$单独建了一个模板,为了让大家看看接口实现的另一种写法。
将保存好的模板放到模板目录里
 

第三步 编写模板翻译类

新建模板扩展类,引用CodeFactoryMVC.Main.dll,列实现接口ICodeFactory

注意第43行:

生成CodeFEx.dll,考到bin文件夹下,在web上新增接口

 OK完成,刷新页面选择其余表,填写项目名称,点击生成,拷贝到原项目,随便找个表预览下

一个list页面就做好了。CodeFDemo的项目源码会放在 知识星球 提供下载,

下载地址

http://fineui.com/bbs/forum.php?mod=viewthread&tid=21482

没有加入星球的赶紧加入(越来越贵!)

 
 
 
 
 
 

基于FineUIMVC的代码生成器(传统三层)v1.0-2

原文地址:https://www.cnblogs.com/shiworkyue/p/8353602.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved