如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之自定义表单开发随笔四
“厂长,上一次我们讲过了工作流的整体规划,今天我要动手做啦!我想先把工作流的自定义表单做出来。”
“好的,以前我做这方面的东西,我给你设计了一份表结构,你先拿去看看。”

“厂长,是不是没发完,怎么就一个表?”
“我就知道你会这么问,我现在给你解释一下重点字段的含义。”
数据表:将表单上的内容保存到哪个表。
关联表的主键:要保存表单数据那张表的主键。
是否需要建表:是否需要把表单中的数据存入到表中,这里的意思是,是将表单上面的栏位与数据表的字段一一对应还是直接将整个表单的内容打包存一块。这里呢就看用户的需要啦,如果需要作统计汇总之类的数据分析,就按字段保存好了,如果不是就可以不用为表单上面每一个栏位都对应到数据字段,这样操作起来也简单。
表单内容:注意啦!就是这里,其实我是想把表单上所有的内容以json形式全部保存到一个字段里。这样后台不用再单独去建一张表来保存这些东西。前台统一去解析就好了。
“明白了,这样做确实好,可以少用好多表。”
“好的,闲话少说,我给你看第一个界面,我们在做界面布局的时候要考虑用户操作便捷性,所以可以做成向导式的。”
“演示地址就是下面这个,你可以去看看”
http://www.learun.cn:8090 、 用户名:System,密码:0000
“厂长,这里点下一步就是跳到一个新的页面吗?”
“当然不是,其实是多个DIV之间的切换。来我给你看看代码。”
“别个这个页面看起来很复杂的样子,其实就是几个div+js实现的。先看html”
<div class="widget-body">
<div id="wizard" class="wizard" data-target="#wizard-steps" >
<ul class="steps">
<li data-target="#step-1" class="active"><span class="step">1</span>基本配置<span class="chevron"></span></li>
<li data-target="#step-2"><span class="step">2</span>表单设计<span class="chevron"></span></li>
<li data-target="#step-4"><span class="step">3</span>创建完成<span class="chevron"></span></li>
</ul>
</div>
<div class="step-content wizard-step-content" id="wizard-steps">
<div class="step-pane wizard-step-pane active" id="step-1">
</div>
<div class="step-pane flowapp" id="step-2">
<div id="frmdesign"></div>
</div>
<div class="step-pane" id="step-4">
<div class="drag-tip">
<i class="fa fa-check-circle"></i>
<p >设计完成,请点击保存</p>
</div>
</div>
</div>
<div class="form-button" id="wizard-actions">
<a id="btn_last" disabled class="btn btn-default btn-prev">上一步</a>
<a id="btn_next" class="btn btn-default btn-next">下一步</a>
<a id="btn_caogao" class="btn btn-info">保存草稿</a>
<a id="btn_finish" disabled class="btn btn-success" onclick="finishbtn();">保存</a>
</div>
</div>
再来看一下JS
//加载导向
$('#wizard').wizard().on('change', function (e, data) {
var $finish = $("#btn_finish");
var $next = $("#btn_next");
if (data.direction == "next") {
switch (data.step) {
case 1:
return bindingBase();
break;
case 2://绑定表单
if (!bindingFrm()) {
return false;
}
$finish.removeAttr('disabled');
$next.attr('disabled', 'disabled');
$('#btn_caogao').attr('disabled', 'disabled');
break;
default:
break;
}
} else {
$finish.attr('disabled', 'disabled');
$next.removeAttr('disabled');
$('#btn_caogao').removeAttr('disabled');
}
});
“哇,真的呢,这种效果好,果然是可以跳来跳去的。那你现在讲一下这个拖拽的表单是怎么实现的吧。”
“恩,你看看,这个东西的原理其实就是拼接html,左边放工具栏,工具栏上选择不同的工具其实就是不同类型的控件,右侧设置控件的属性。中间显示效果。”
function setFrmInfo(data)
{
var _height = $(window).height() - 87 < 410 ? 410 : $(window).height() - 87;
postData.FrmContent = data.FrmContent;
if (data.isSystemTable == "0") {
frmapp = $('#frmdesign').frmDesign({
Height: _height,
frmContent: postData.FrmContent
});
}
else {
var _frmdatabase = [];
for (var i in frmdatabase)
{
if (frmdatabase[i].column != postData.FrmTableId)
{
_frmdatabase.push(frmdatabase[i]);
}
}
frmapp = $('#frmdesign').frmDesign({
Height: _height,
tablefiledJsonData: _frmdatabase,
isSystemTable: postData.isSystemTable,
frmContent: postData.FrmContent
});
}
}
function bindingFrm() {
var frmcotentls = frmapp.getData();
if (!frmcotentls) {
return false;
}
postData.FrmContent = JSON.stringify(frmcotentls);
return true;
}
/*=========表单选择(end)====================================================================*/ /*=========创建完成(begin)==================================================================*/
function finishbtn() {
postData["EnabledMark"] = 1;
$.SaveForm({
url: "../../FlowManage/FormDesign/SaveForm?keyValue=" + keyValue,
param: postData,
loading: "正在保存数据...",
success: function () {
$.currentIframe().$("#gridTable").trigger("reloadGrid");
}
})
}
后台代码:
/// <summary>
/// 保存用户表单(新增、修改)
/// </summary>
/// <param name="keyValue">主键值</param>
/// <param name="userEntity">用户实体</param>
/// <returns></returns>
[HttpPost]
[ValidateAntiForgeryToken]
[AjaxOnly]
public ActionResult SaveForm(string keyValue, WFFrmMainEntity userEntity)
{
wfFrmMainBLL.SaveForm(keyValue, userEntity);
return Success("操作成功。");
}
/// <summary>
/// 保存表单
/// </summary>
/// <param name="entity">表单模板实体类</param>
/// <param name="keyValue">主键</param>
/// <returns></returns>
public int SaveForm(string keyValue,WFFrmMainEntity entity)
{
try
{
if (string.IsNullOrEmpty(keyValue))
{
entity.Create();
this.BaseRepository().Insert(entity);
}
else
{
entity.Modify(keyValue);
this.BaseRepository().Update(entity);
}
return 1;
}
catch(Exception)
{
throw;
}
}
就这么简单,一个功能就完了。
如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之自定义表单开发随笔四的更多相关文章
- 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔
老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...
- 如何提高码农产量,基于ASP.NET MVC的敏捷开发框架开发随笔一
公司业务量比较大,接了很多项目,为了缩短开发周期老板让我牵头搭建了一个敏捷开发框架. 我们主要的业务是做OA.CRM.ERP一类的管理系统,一个通用的后台搭出来,再配合一些快速开发的组件开发效率能提高 ...
- 如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之移动端开发随笔二
前言 在前一篇文章中我已经做过开篇,接下来的随笔会详细讲一下我们的开发框架是如何实现的,专业的事由专业的人来讲,以后就由我们的高级码农小李英文名查尔斯和他的师父厂长(因为姓陈,酷爱摄影,我们的文艺片都 ...
- 如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之工作流开发随笔三
前言 “厂长,APP的那几个功能都差不多了,接下来要做工作流,工作流这东西我完全没概念啊.” “查尔斯,一般来说工作流就是指将指定的数据.文件.任务按照预定的规则进行传递流转.比如说你要请假,拿个请假 ...
- 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...
- 转发-基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现
基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现 概述 在日常开发中, 我们经常谈起模块化/插件化架构,这样可既可以提高开效率,又可以实现良好的扩展性,尤其对于产品化的系统有 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- ASP.NET MVC Bootstrap极速开发框架
前言 每次新开发项目都要从头开始设计?有木有一个通用的快速开发框架?并且得是ASP.NET MVC And Bootstrap?数据库不要手工创建?框架对未来业务支持的扩展性好?这么简单的功能还需要 ...
随机推荐
- Struts2 内建的验证规则
Struts2 内建的验证规则 conversion validator:转换验证器 date validator:日期验证器 double validator:浮点验证器 email validat ...
- mysqli_insert_id
mysqli_insert_id($mysqli),这个函数一开始我用的时候老是返回0,疯掉了,百度了n次,问了n个人,搞了几天,就是解决不了,最后我把他换成面对对象编程,终于成功了,开心,也许这就是 ...
- hdu 3003 Pupu
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3003 题目大意:一种动物身上有n种不同的皮肤,每种皮肤有透明很不透明两种状态,经过一天的日晒,透明的可 ...
- EL表达式中获取list长度(JSTL函数用法)
在jsp页面中不能通过${list.size}取列表长度,而是 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" pref ...
- 如何利用好chrome控制台这个神器好好调试javascript代码
上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1 ...
- 大型网站调试工具之一(php性能优化分析工具XDebug)
一.安装配置 1.下载PHP的XDebug扩展,网址:http://xdebug.org/ 2.在Linux下编译安装XDebug 引用 tar -xzf xdebug-2.0.0RC3.gzcd x ...
- 查询ubuntu系统版本相关信息
查询ubuntu系统版本相关信息 sky@sky-virtual-machine:~$ cat /etc/issueUbuntu 12.04.5 LTS \n \l proc目录下记录的当前系统运行的 ...
- mysql 单列索引限制
innodb_large_prefix. 这个参数默认值是OFF.当改为ON时,允许列索引最大达到3072. >=5.7.7默认打开 <=5.7.6默认关闭 innodb_large_pr ...
- 【 LVS 】DR 方式实现过程
LVS-DR方式实现负载均衡 一.环境介绍
- 解决xshell 、SecureCRT中文乱码
一.解决xshell 中文乱码 在xshell命令行里面 输入: locale输出: LANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERI ...