ASP.NET原创框架十一-应用模块开发之页面UI
为方便页面前端开发封装了妹子UI也就是amazeui库
需要在页面使用该库只需要引导一下js即可
<link rel="stylesheet" href="<%=urlBefore%>/public/amazeui/amazeui/css/amazeui.min.css" />
<!--[if (gte IE 9)|!(IE)]><!-->
<script type="text/javascript" src="<%=urlBefore%>/public/amazeui/amazeui/js/jquery.min.js"></script>
<!--<![endif]-->
<script type="text/javascript" src="<%=urlBefore%>/public/amazeui/amazeui/js/amazeui.js"></script>
<script src="<%=urlBefore %>/public/amazeui/amazeui_Defined/script/amazeui.common.xn.js?ver=1"></script>
<script src="<%=urlBefore %>/public/amazeui/amazeui_Defined/script/amazeui.mobile.xn.js?ver=1"></script>
<!--引入layer使用-->
<script type="text/javascript" src="<%=GetResourceUrl(HttpContext.Current)%>/public/layer/mobile/layer.js"></script>
常用的布局和js代码
一、datagrid数据查询列表
页面代码如:
<body style="overflow: hidden;">
<div class="am-g">
<section data-am-widget="accordion" class="am-accordion am-accordion-gapped"
data-am-accordion='{ }'>
<dl class="am-accordion-item am-active">
<dt class="am-accordion-title">查询条件过滤</dt>
<dd class="am-accordion-bd am-collapse am-in">
<!-- 规避 Collapase 处理有 padding 的折叠内容计算计算有误问题, 加一个容器 -->
<div class="am-accordion-content" style="overflow-x: auto;">
<form id="pageForm">
<table class="tableForm datagrid-toolbar" style="margin-left: 10px; width: 1000px; height: 100%">
<tr>
<td>创建时间-开始</td>
<td>
<input name="createtime_Min" id="createtime_Min" name="createtime_Min" type="text" style="border: 1px solid #ccc; width: 152px;" data-am-datepicker readonly /></td>
<td>至</td>
<td>
<input name="createtime_Max" id="createtime_Max" name="createtime_Max" type="text" style="border: 1px solid #ccc; width: 152px;" data-am-datepicker readonly /></td>
<td>歌唱者</td>
<td>
<input id="singer" name="singer" type="text" style="border: 1px solid #ccc;" /></td>
<td>歌曲名</td>
<td>
<input id="songname" name="songname" type="text" style="border: 1px solid #ccc;" /></td>
<th>
<button type="button" class="am-btn am-btn-default am-btn-xs " onclick="search()"><span class="am-icon-search"></span>查询</button>
<button type="button" class="am-btn am-btn-default am-btn-xs " onclick="clearcontent()"><span class="am-icon-refresh"></span>清空</button>
</th>
</tr>
</table>
</form>
</div>
</dd>
</dl>
</section>
<div class="am-u-sm-12 am-u-md-6">
<div class="am-btn-toolbar">
<div class="am-btn-group am-btn-group-xs">
<button type="button" class="am-btn am-btn-default" onclick="add()"><span class="am-icon-plus"></span>新增</button>
<button type="button" class="am-btn am-btn-danger am-btn-xs " onclick="del()"><span class="am-icon-trash-o"></span>删除</button>
</div>
</div>
</div>
</div>
<div class="dataContainer">
</div>
<div id="popWindow"></div>
<div id="modeWindow"></div>
其中pageForm为查询条件,am-btn-toolbar为操作按钮区
dataContainer:为数据列表容器
popWindow:为弹出层容器
modeWindow:弹出层容器
列表生成js代码,在页面准备好后生成查询列表
使用该列表保证返回的json数据格式如下json串
服务端使用以下代码返回该格式数据
using(NodeDBEngine m_NodeDBEngine=new NodeDBEngine())
{
.。。。
int nPageSize = 10;
int nPageIndex = 1;
if (KeyIsOK(m_HH, "page"))
{
nPageIndex = Convert.ToInt32(m_HH["page"].ToString());
}
if (KeyIsOK(m_HH, "rows"))
{
nPageSize = Convert.ToInt32(m_HH["rows"].ToString());
}
bool bOK;
RecordReturn result = (RecordReturn)m_NodeDBEngine.XNGetSQLPageRecordVar(SQLString, nPageSize, nPageIndex, out bOK, m_varList.ToArray());
if (bOK)
{
m_ReturnJson.bOK = true;
m_ReturnJson.m_ReturnOBJ = new { total = result.RecordCnt, rows = result.data, pageSize = nPageSize };
}
else
{
m_ReturnJson.bOK = false;
m_ReturnJson.sMsg = "查询小站关键字记录失败";
}
return m_ReturnJson;
}
该json的样本如何
其中total:总行数,rows:为当前页数据,pageSize:
{
"total": 44,
"rows": [
{
"weight": 0,
"singer": "大壮",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/dzhuang.png",
"mp3file": "/public/music/data/wzhuang.mp3",
"blog_musics_nodeuuid": "16617757285200000003000",
"songname": "伪装",
"lrc": "/public/music/data/wzhuang.lrc",
"blog_musicgroupdata_nodeuuid": "16618573339220000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "大壮",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/dzhuang.png",
"mp3file": "/public/music/data/cybu.mp3",
"blog_musics_nodeuuid": "16617757285280000003000",
"songname": "差一步",
"lrc": "/public/music/data/cybu.lrc",
"blog_musicgroupdata_nodeuuid": "16618573339150000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "女生",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/rj.png",
"mp3file": "/public/music/data/wlrjyt.mp3",
"blog_musics_nodeuuid": "16617757285340000003000",
"songname": "我来人间一趟",
"lrc": "/public/music/data/wlrjyt.lrc",
"blog_musicgroupdata_nodeuuid": "16618573339080000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "陈雅森",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/yan.png",
"mp3file": "/public/music/data/yan.mp3",
"blog_musics_nodeuuid": "16617757285410000003000",
"songname": "烟",
"lrc": "/public/music/data/yan.lrc",
"blog_musicgroupdata_nodeuuid": "16618573339010000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "张茜",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/zhangqian.png",
"mp3file": "/public/music/data/ylhzhe.mp3",
"blog_musics_nodeuuid": "16617757285480000003000",
"songname": "用力活着",
"lrc": "/public/music/data/ylhzhe.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338950000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "苏潭潭",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/stt.png",
"mp3file": "/public/music/data/zcdrsheng.mp3",
"blog_musics_nodeuuid": "16617757285550000003000",
"songname": "这扯淡的人生",
"lrc": "/public/music/data/zcdrsheng.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338890000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "张茜",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/zhangqian.png",
"mp3file": "/public/music/data/rjmchu.mp3",
"blog_musics_nodeuuid": "16617757285610000003000",
"songname": "人间某处",
"lrc": "/public/music/data/rjmchu.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338830000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "大壮",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/dzhuang.png",
"mp3file": "/public/music/data/slnjdnr.mp3",
"blog_musics_nodeuuid": "16617757285670000003000",
"songname": "上了年纪的男人",
"lrc": "/public/music/data/slnjdnr.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338780000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "海来阿木",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/hlam.png",
"mp3file": "/public/music/data/rsrge.mp3",
"blog_musics_nodeuuid": "16617757285740000003000",
"songname": "人生如歌",
"lrc": "/public/music/data/rsrge.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338720000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
},
{
"weight": 0,
"singer": "半吨兄弟",
"blog_musicgroups_nodeuuid": "16617953385760000003000",
"pic": "/public/music/data/bandunxiongdi.png",
"mp3file": "/public/music/data/wzysheng.mp3",
"blog_musics_nodeuuid": "16617757285800000003000",
"songname": "我这一生",
"lrc": "/public/music/data/wzysheng.lrc",
"blog_musicgroupdata_nodeuuid": "16618573338650000003000",
"createtime": "/Date(1661828533000)/",
"sitename": "散装码农",
"groupname": "中年人歌曲"
}
],
"pageSize": 10
}
列表JS代码如下:
<script>
//显示图片
function showPic(title, imgTitle, imgSrc) {
var iframeMode = $('<iframe src="/public/share/plugin/picbox/ShowPicture.html?imgSrc=' + imgSrc + '&imgTitle=' + imgTitle + '" width="100%" height="360px;" frameborder="0"></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: title,
width: 800,
noButton: true,
});
}
//页面加载完毕执行
$(function () {
//定义数据列
其中 name:为返回数据行中的列名,displayName:为显示的列名,enabled:是否可用,width:宽度,format:格式,function(row)当函数格式时执行的函数返回格式串
var translateT = [
{
name: "action", displayName: "操作", enabled: true, width: 100, format: "func", func: function (row) {
var ss = "<button type='button' class='am-btn am-btn-default am-btn-xs am-text-secondary' onclick='setGroupDataWeight(\"" + row.blog_musicgroupdata_nodeuuid + "\",\"" + row.songname + "\")'><span class='am-icon-pencil-square-o'></span>设置歌曲权重</button>";
return ss;
}
}
,{ name: "songname", displayName: "歌名", enabled: true, width: 70 }
, { name: "singer", displayName: "歌者", enabled: true, width: 70 }
, { name: "weight", displayName: "权重", enabled: true, width: 70 }
, {
name: "pic", displayName: "歌者头像", enabled: true, width: 100, format: "func", func: function (row) {
return '<img width="80" src="' + row.pic + ' " onclick="showPic(\'歌者头像\',\'\',\'' + row.pic + '\')">';
}
}
, { name: "groupname", displayName: "所在歌曲分组", enabled: true, width: 70 }
, { name: "sitename", displayName: "所在小站", enabled: true, width: 70 }
, { name: "createtime", displayName: "创建时间", enabled: true, format: "JsonDate", width: 100 }
];
//列表在容器dataContainer中,
//datagrid json参数说明
//form:参数所在容器pageForm url:请求的url ,nPageIndex:初始请求页,那nPageSize:数据分页大小,queryParams:初始查询条件,translate:为列定义
myGoodPageOpts = $('.dataContainer').datagrid({
form: '.pageForm',//放置查询条件的表单
url: '/userblog/Getblog_musicgroupdata_RawJson.ajax?blog_musicgroups_nodeuuid=<%=blog_musicgroups_nodeuuid%>',
nPageIndex: 1,//当前页
nPageSize: 10,//每页显示数据条数
callbacks: null,
translate: translateT,
operate: [],
queryParams: {
a:'a'
},
});
});
</script>
二、确认窗口
$.confirm({
title: '提示',//窗口标题
content: '确定要添加:' + rows[0].nickname + '入用户组吗?',//内容
onSuccess: function () {
});
title:确认窗口标题
content:确认窗口的内容
onSuccess:确认后执行的函数
三、调用提示框
显示提示框
$.msgprogress({ msg: '正在添加...' });
msg:表示提示信息
关闭提示框
$.msgprogress('close');
四、信息提示框
$.alert({ content: res.sMsg });
content:要显示的提示信息
五、弹出页面
var iframeMode = $('<iframe src="/userblog/MenuItemsRecord.aspx?blog_mainmenus_nodeuuid=' + blog_mainmenus_nodeuuid + '" width="100%" height="600px;" frameborder="0"></iframe>');
$('#modeWindow').window({
content: iframeMode,
title: name + '子菜单管理',
width: 700,
noButton: true,
});
content:iframe内容
title:标题栏
width:宽度
noButton:true表示无按钮
六、弹出层
var content = $('<form class="am-form am-form-horizontal" id="form" method="post">' +
。。。+
'</form>');
$('#windows').window({
title: title,//窗口标题
content: content,
//width: 700,//弹出框宽度
onSuccess: function () {
//点确定执行
var type = content.find('#type').val();
var url = '';
if (type == "add") {
url = '/userblog/AddOneMainMenu.ajax';
} else {
url = '/userblog/EditOneMainMenu.ajax';
}
$.msgprogress({ msg: '正在' + title + '...' });
var options = {
url: url,
dataType: 'json',
success: function (result) {
$.msgprogress('close');
if (result.bOK) {
$('#windows').window('close');
myGoodPageOpts.datagrid('reload');
} else {
$.alert({ content: result.sMsg });
}
}
}
$(content).ajaxSubmit(options);
},
onClose:function(){
//点关闭后执行
}
);
七、关闭窗口
$('#windows').window('close');
八、刷新查询列表
myGoodPageOpts.datagrid('reload');
九、combox使用
$("#companyidEdit").combox({
url: "/CoreSYS.SYS/GetSelectCompany_RawJson.ajax",//企业
selectDataContainer: $("#companyidEdit"),
text: 'company',
value: 'sys_companys_nodeuuid',
width: 120,
onSelect: function () {
},
});
companyidEdit表示要设置为combox的input如
<input name="sys_companys_nodeuuid" id="companyidEdit" type="hidden" style="border: 1px solid #ccc;" />
url:为获得combox数据的访问地址
selectDataContainer:表示combox的容器
text:返回数据的显示串
value:返回显示数据的值
width:宽度
onSelect:选择后执行的函数
以上combox返回的数据格式为
[
{
“company”:"成都",
“sys_companys_nodeuuid“:xxxxxx
},
{
“company”:"重庆1",
“sys_companys_nodeuuid“:yyyyyy
}
,
。。。
]
十、列表查询与查询条件清空
//查询
function search() {
myGoodPageOpts.datagrid('load', $.serializeObject($('#chauserForm')));
}
//清空条件
function clearcontent() {
$('#chauserForm').find("input,select").val("");
}
下集介绍通过代码工厂生成代码