2023年2月

在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值、取值、清空,以及相关的使用。

我们知道,一般Web界面包括的界面控件有:单行文本框、多行文本框、密码文本框、下拉列表Combobox、日期输入控件、数值输入控件、单项选择、复选框、表格控件DataGrid、树形控件、布局控件、弹出式对话框、提示信息、列表控件等,这些界面控件的操作都有哪些不同,下面我们来逐一进行介绍。

1、单行文本框

使用easyui的控件,单行文本可以使用easyui-validatebox样式即可,类型为text的控件。

界面代码如下所示:

<inputclass="easyui-validatebox"type="text"id="Name"name="Name" />或者<inputtype="text"ID="txtLoginName"name="txtLoginName"style="width:100px"  />

赋值给界面控件代码如下:

$("#Name").val(info.Name);

获取界面控件的值代码如下:

var name = $("#Name").val();

如果是标签Lable控件,这需要把val 使用text替代即可,如下代码所示:

$("#Name").text(info.Name);

对于easyui-validatebox样式的控件,一般来说,有几个常见属性可以设置他们的。

//必输项:<inputclass="easyui-validatebox"type="text"name="name"data-options="required:true"></input>//格式的验证:<inputclass="easyui-validatebox"type="text"name="email"data-options="validType:'email'"></input>
 <inputclass="easyui-validatebox"type="text"name="email"data-options="required:true,validType:'url'"></input>//长度范围的验证:<inputclass="easyui-validatebox"data-options="validType:'length[1,3]'">

2、多行文本框

easyui的界面样式,可以使用easyui-validatebox,或者默认的textarea即可。

界面代码如下所示:

<textareaid="type_Remark"class="easyui-validatebox"required="true"style="height:100px;"></textarea>

或者

<textareastyle="height:60px;width:200px"id="type_Remark"name="Remark"></textarea>

赋值给界面控件代码如下:

$("#type_Remark").val(json.Remark);

获取界面控件的值代码如下:

 var text = $("#type_Remark").val();    

3、密码文本框

密码文本框和常规的文本框一样,只是输入字符的时候,系统做了屏蔽显示而已,把它作为一个来独立说明,也是因为它也是常见输入的一种。

界面代码如下所示:

 <inputtype="password"name="password"style="width:260px;"></input>

赋值给界面控件代码如下:

var password = '123';
$(
"#Password").val(password)

获取界面控件的值代码如下:

            $("#btnLogin").click(function() {
                var postData ={
UserName: $(
"#UserName").val(),
Password: $(
"#Password").val(),
Code: $(
"#Code").val()
};

4、下拉列表Combobox

常见的EasyUI的ComboBox是可以输入,也可以从列表选择的内容的输入控件。

界面代码如下所示:

<inputclass="easyui-combobox"type="text"id="type_PID1"name="PID" />

绑定下拉列表的数据源代码如下:

            $('#type_PID1').combobox({
url:
'/DictType/GetDictJson',
valueField:
'Value',
textField:
'Text'});

设置控件的选择的内容代码如下:

$("#type_PID1").combobox('setValue', json.PID);

获取界面控件的值代码如下:

var systemType=  $("#txtSystemType_ID").combobox('getValue');

而利用标准的Select控件虽然可以实现从列表选择,不过不够ComboBox控件那么灵活方便,Select控件的界面代码如下:

<selectid="txtPID"style="width: 100%" > </select>

5、日期输入控件

easyui使用class=‘easyui-datebox’来标识日期控件,从弹出的层中选择正确的日期,是一种非常常见的界面输入控件,可以替代My97DatePicker日期输入控件。

弹出窗体界面效果如下。

它的界面代码如下所示:

<inputclass="easyui-datebox"type="text"ID="txtLastUpdated"name="txtLastUpdated"style="width:100px"  />

赋值给界面控件代码如下:

$("#LastUpdated").datebox('setValue', info.LastUpdated);

获取界面控件的值代码如下:

var lastupate = $("#txtLastUpdated").datebox('getValue');

6、数值输入控件

easyui使用样式easyui-numberbox标识为数值类型,其表现为文本框,但只能输入数值。

界面代码如下所示:

<inputclass="easyui-numberbox"data-options="min:10,max:90,precision:2,required:true">

或者使用‘easyui-numberspinner’样式来标识,可以上下调节数值。

<inputclass="easyui-numberspinner"data-options="min:10,max:100,required:true"style="width:80px;"></input>

赋值给界面控件代码如下:

$('#nn').numberbox('setValue', 206.12);

或者

$('#ss').numberspinner('setValue', 8234725); 

获取界面控件的值代码如下:

var v = $('#nn').numberbox('getValue');

或者

var v = $('#ss').numberspinner('getValue');

7、单项选择Radio控件

单项选择Radio控件,是在多项内容里面选择一个选项进行保存或者显示。

界面代码如下所示:

                    <tr>
                        <th>
                            <label>数据分开方式:</label>
                        </th>
                        <td>
                            <inputname="SplitType"type="radio"class="easyui-validatebox"checked="checked"required="true"value="Split">分隔符方式,多个数据中英文逗号,分号,斜杠或顿号[, , ; ; / 、]分开,或一行一个 <br/>
                            <inputname="SplitType"type="radio"class="easyui-validatebox"required="true"value="Line">一行一个记录模式,忽略所有分隔符号</td>
                    </tr>

赋值给界面控件代码如下:

$('input:radio[name="SplitType"][value="Split"]').prop('checked', true);

获取界面控件的值代码如下:

$("input[name='SplitType']:checked").val()

或者使用Comobo控件作为单项选择的控件也是可以的,界面效果如下所示。

其界面代码如下所示:

    <selectid="cc"style="width:150px"></select>
    <divid="sp">
        <divstyle="color:#99BBE8;background:#fafafa;padding:5px;">Select a language</div>
        <inputtype="radio"name="lang"value="01"><span>Java</span><br/>
        <inputtype="radio"name="lang"value="02"><span>C#</span><br/>
        <inputtype="radio"name="lang"value="03"><span>Ruby</span><br/>
        <inputtype="radio"name="lang"value="04"><span>Basic</span><br/>
        <inputtype="radio"name="lang"value="05"><span>Fortran</span>
    </div>
    <scripttype="text/javascript">$(function(){
$(
'#cc').combo({
required:
true,
editable:
false});
$(
'#sp').appendTo($('#cc').combo('panel'));
$(
'#sp input').click(function(){varv=$(this).val();vars=$(this).next('span').text();
$(
'#cc').combo('setValue', v).combo('setText', s).combo('hidePanel');
});
});
</script>

8、复选框

复选框是在一项或多项内容中,选择零项或者多项的一个输入界面控件。

界面代码如下所示:

<inputid="chkIsExpire"type="checkbox" >帐号过期

由于复选框的一些特殊性质,在表单提交的时候,如果没有勾选的选型,使用serializeArray()方法构造的数据,复选框的值则不会被提交。

基于这个原因,我们可以使用Select控件进行替代,实现复选项的功能,而不影响

var postData = $("#ffEdit").serializeArray();

以上代码的使用。

使用Select控件的代码如下所示。

<selectid="Visible1"name="Visible">
          <optionvalue="true"selected>正常</option>
          <optionvalue="false">不可见</option>
 </select>

赋值给界面控件代码如下:

$("#Visible1").prop('checked', info.Visible);

获取界面控件的值代码如下:

var visible = $("#txtVisible").val();

9、表格控件DataGrid

easyui的列表控件,可以通过指定table的class属性为
easyui-datagrid即可实现表格的定义,界面代码如下所示:

<tableclass="easyui-datagrid"title="Basic DataGrid"style="width:700px;height:250px"data-options="singleSelect:true,collapsible:true,url:'../datagrid/datagrid_data1.json'">
        <thead>
            <tr>
                <thdata-options="field:'itemid',width:80">Item ID</th>
                <thdata-options="field:'productid',width:100">Product</th>
                <thdata-options="field:'listprice',width:80,align:'right'">List Price</th>
                <thdata-options="field:'unitcost',width:80,align:'right'">Unit Cost</th>
                <thdata-options="field:'attr1',width:250">Attribute</th>
                <thdata-options="field:'status',width:60,align:'center'">Status</th>
            </tr>
        </thead>
    </table>

不过为了避免使用脚本定义datagrid导致多次初始化的问题,我们一般只需要指定一个table代码即可,界面如下所示

            <tableid="grid"style="width: 1024px"title="用户操作"iconcls="icon-view">            
            </table>

而表格控件的数据加载,我们使用javascript进行初始化,初始化后的表格界面显示效果如下所示。

Javascript代码如下所示,其中的width: function () { return document.body.clientWidth * 0.9 }是用来实现宽度自适应的一个操作。

        //实现对DataGird控件的绑定操作
        functionInitGrid(queryData) {
$(
'#grid').datagrid({ //定位到Table标签,Table标签的ID是grid url: '/Menu/FindWithPager', //指向后台的Action来获取当前菜单的信息的Json格式的数据 title: '功能菜单',
iconCls:
'icon-view',
height:
650,
width:
function () { return document.body.clientWidth * 0.9},
nowrap:
true,
autoRowHeight:
false,
striped:
true,
collapsible:
true,
pagination:
true,
pageSize:
100,
pageList: [
50,100,200],
rownumbers:
true,//sortName: 'ID', //根据某个字段给easyUI排序 sortOrder: 'asc',
remoteSort:
false,
idField:
'ID',
queryParams: queryData,
//异步查询的参数 columns: [[
{ field:
'ck', checkbox: true }, //选择 { title: '显示名称', field: 'Name', width: 200},
{ title:
'图标', field: 'Icon', width: 150},
{ title:
'排序', field: 'Seq', width: 80},
{ title:
'功能ID', field: 'FunctionId', width: 80},
{ title:
'菜单可见', field: 'Visible', width: 80},
{ title:
'Winform窗体类型', field: 'WinformType', width: 400},
{ title:
'Web界面Url地址', field: 'Url', width: 200},
{ title:
'Web界面的菜单图标', field: 'WebIcon', width: 120},
{ title:
'系统编号', field: 'SystemType_ID', width: 80}
]],
toolbar: [{
id:
'btnAdd',
text:
'添加',
iconCls:
'icon-add',
handler:
function() {
ShowAddDialog();
//实现添加记录的页面 }
},
'-', {
id:
'btnEdit',
text:
'修改',
iconCls:
'icon-edit',
handler:
function() {
ShowEditOrViewDialog();
//实现修改记录的方法 }
},
'-', {
id:
'btnDelete',
text:
'删除',
iconCls:
'icon-remove',
handler:
function() {
Delete();
//实现直接删除数据的方法 }
},
'-', {
id:
'btnView',
text:
'查看',
iconCls:
'icon-table',
handler:
function() {
ShowEditOrViewDialog(
"view");//实现查看记录详细信息的方法 }
},
'-', {
id:
'btnReload',
text:
'刷新',
iconCls:
'icon-reload',
handler:
function() {//实现刷新栏目中的数据 $("#grid").datagrid("reload");
}
}],
onDblClickRow:
function(rowIndex, rowData) {
$(
'#grid').datagrid('uncheckAll');
$(
'#grid').datagrid('checkRow', rowIndex);
ShowEditOrViewDialog();
}
})
};

对于查询按钮触发的数据后台查询及数据绑定操作,javascript代码如下所示:

        //绑定查询按钮的的点击事件
        functionBindSearchEvent() {//按条件进行查询数据,首先我们得到数据的值
            $("#btnSearch").click(function() {//得到用户输入的参数,取值有几种方式:$("#id").combobox('getValue'), $("#id").datebox('getValue'), $("#id").val()
                //字段增加WHC_前缀字符,避免传递如URL这样的Request关键字冲突
                var queryData ={
WHC_ID: $(
"#txtID").val(), WHC_Name: $("#txtName").val(),
WHC_Icon: $(
"#txtIcon").val(),
WHC_Seq: $(
"#txtSeq").val(),
WHC_FunctionId: $(
"#txtFunctionId").val(),
WHC_Visible: $(
"#txtVisible").val(),
WHC_WinformType: $(
"#txtWinformType").val(),
WHC_Url: $(
"#txtUrl").val(),
WHC_WebIcon: $(
"#txtWebIcon").val(),
WHC_SystemType_ID: $(
"#txtSystemType_ID").val()
}
//将值传递给 InitGrid(queryData);return false;
});
}

通过构造一些查询参数并传递相应的值,后台根据这些参数,从对应控制器的分页方法
FindWithPager
获取相应的分页数据,并绑定到grid控件中。

另外,如果需要在grid里面增加一些图片或者链接什么的,应该如何操作呢?

如下界面所示的效果:

首先需要在初始化代码里面增加列的formatter回调函数,如下所示。

columns: [[
{ field:
'ck', checkbox: true }, //选择 { title: '显示名称', field: 'Name', width: 200},
{ title:
'图标', field: 'Icon', width: 150},
{ title:
'排序', field: 'Seq', width: 80},
{ title:
'功能ID', field: 'FunctionId', width: 80},
{
title:
'菜单可见', field: 'Visible', width: 80, formatter: function(val, rowdata, index) {if(val) {return '<a class="grid_visible" href="javascript:void(0)" >' + val + '</a>';
}
else{return '<a class="grid_unvisible" href="javascript:void(0)" >' + val + '</a>';
}
}
},
{ title:
'Winform窗体类型', field: 'WinformType', width: 400},
{ title:
'Web界面Url地址', field: 'Url', width: 200},
{ title:
'Web界面的菜单图标', field: 'WebIcon', width: 120},
{ title:
'系统编号', field: 'SystemType_ID', width: 80}
]],

在formatter回调函数里面添加逻辑代码,判断是否可见,其实就是增加两个图片按钮,但是图片按钮的样式设置,必须在加载数据完毕后才能操作,因此需要在函数里面处理。

                onLoadSuccess: function() {
$(
".grid_visible").linkbutton({ text: '可见', plain: true, iconCls: 'icon-ok'});
$(
".grid_unvisible").linkbutton({ text: '不可见', plain: true, iconCls: 'icon-stop'});
},

如果显示的图片不完整,设置行的自动调整高度属性为true即可。

autoRowHeight:
true

10、树形控件

虽然easyui也有Tree控件,不过我较喜欢使用zTree这个树形控件,这个是一个免费的Jquery树控件。

引用代码如下所示:

    <linkhref="~/Content/JQueryTools/JQueryTree/css/zTreeStyle/zTreeStyle.css"rel="stylesheet"type="text/css" />
    <scriptsrc="~/Content/JQueryTools/JQueryTree/js/jquery.ztree.core-3.5.min.js"type="text/javascript"></script>

初始化在Tree树控件的界面代码如下所示:

    <scripttype="text/javascript">
     <!--
        varsetting={
data: {
simpleData: {
enable:
true}
},
callback: {
onClick: onClick,
onDblClick: onDblClick
}
}
//重新加载树形结构(异步) functionreloadTree() {
$(
"#loading").show();

$.getJSON(
"/DictType/GetTreeJson?r=" +Math.random(),function(json) {
$.fn.zTree.init($(
"#treeDemo"), setting, json);
$.fn.zTree.getZTreeObj(
"treeDemo").expandAll(true);vartreeObj=$.fn.zTree.getZTreeObj("treeDemo");vartreeNodes=treeObj.getNodes();if(treeNodes!= null) {
loadTypeData(treeNodes[
0].id);
}
});
$(
"#loading").fadeOut(500);
}
//树单击节点操作 functiononClick(event, treeId, treeNode, clickFlag) {varid=treeNode.id;
loadTypeData(id);
}
//树双击节点操作 functiononDblClick(event, treeId, treeNode) {varid=treeNode.id;
loadTypeData(id);
ShowDictType(
'edit');
}

11、布局控件

EasyUI通过DIV层来控制布局的显示,DIV里面增加一个Region的属性用来区分属于哪个区域,如下图是我Web开发框架的界面布局效果图。

界面代码如下所示:

我们详细查看主工作区的代码,如下所示。

    <!--主工作区-->
    <divid="mainPanle"region="center"title=""style="overflow:hidden;">
        <divid="tabs"class="easyui-tabs"fit="true"border="false" >
        </div>
    </div>

其中字典管理里面还有子布局的展示,我们查看字典管理里面界面代码,如下所示。

    <divclass="easyui-layout"style="width:700px;height:700px;"fit="true">
        <divdata-options="region:'west',split:true,title:'字典类别',iconCls:'icon-book'"style="width: 300px; padding: 1px;">
            <divstyle="padding: 1px; border: 1px solid #ddd;">                
                .......................</div>
            <div>
                <ulid="treeDemo"class="ztree">
                </ul>
            </div>
        </div>
        <divid="tb"data-options="region:'center',title:'字典数据',iconCls:'icon-book'"style="padding:5px;height:auto">                
            <!-------------------------------详细信息展示表格----------------------------------->
            <tableid="grid"style="width: 940px"title="用户操作"iconcls="icon-view"></table>
        </div>
    </div>

12、弹出式对话框

EasyUI弹出式对话框用的很多,对话框的界面代码放在DIV层里面,一般在界面整个界面加载后中已经初始化了,只是我们根据条件相似适当的层即可,这样就形成了弹出式对话框,弹出式对话框有一个遮罩的效果。

界面代码如下所示:

13、提示信息

在常规的Web界面提示里面,我们一般用纯粹的javascript的alert函数来进行信息的提示,如果在基于EasyUI的界面布局和演示里面,使用这个提示显然会和界面演示不够匹配,因此我们使用messager类来进行相应的提示信息处理,简单的脚本提示代码如下。

$.messager.alert("提示", "修改成功");

提示信息也可以更加丰富,添加图标等信息,界面代码如下所示。

    <script>
        functionalert1(){
$.messager.alert(
'My Title','Here is a message!');
}
functionalert2(){
$.messager.alert(
'My Title','Here is a error message!','error');
}
functionalert3(){
$.messager.alert(
'My Title','Here is a info message!','info');
}
functionalert4(){
$.messager.alert(
'My Title','Here is a question message!','question');
}
functionalert5(){
$.messager.alert(
'My Title','Here is a warning message!','warning');
}
</script>

对于一般的删除操作,一般有一个提示确认的消息框,这个messager类也进行了封装处理,效果也不错。

界面代码如下所示。

                $.messager.confirm("删除确认", "您确认删除选定的记录吗?", function(deleteAction) {if(deleteAction) {
$.get(
"/DictData/DeletebyIds", postData, function(data) {if (data == "true") {
$.messager.alert(
"提示", "删除选定的记录成功");
$(
"#grid").datagrid("reload");//当删除完成之后,第二次删除的时候还记得上次的信息,这样是不可以的,所以我们需要清除第一次的信息 rows.length = "";//第一种方法 $("#grid").datagrid("clearSelections");//第二种方法 }else{
$.messager.alert(
"提示", data);
}
});
}
});

以上就是我Web开发框架里面常用到的一些界面控件展示以及相关的代码介绍,有一些不太常用的控件可能还没有在本文中介绍,欢迎大家进行补充和讨论,以后有时间继续完善这个文章,作为基于MVC+EasyUI的框架界面的一个很好的参考。希望大家喜欢,多多提意见。

基于MVC4+EasyUI的Web开发框架的系列文章:

基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍


基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

基于MVC4+EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理

基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔《
Web开发中的文件上传组件uploadify的使用
》中可以看到,Asp.NET中如何使用这个组件进行文件上传的,当时上传文件的处理主要也是使用ashx一般处理程序来进行处理的。本文主要介绍我的Web开发框架中,在MVC4的环境中如何集成这个非常棒的文件上传组件的。

1、上传组件uploadify的说明及脚本引用

Uploadify 是 JQuery 一个著名的上传插件,利用 Flash 技术,Uploadify 越过浏览器的限制,控制了整个上传的处理过程,实现了客户端无刷新的文件上传,这样就实现了在客户端的上传进度控制,所以,你首先要确定浏览器中已经安装了 Adobe 的 Flash 插件。
Uploadify 当前有两个版本,基于 Flash 是免费的,还有基于 HTML5 的收费版,我们使用免费版,当前版本为v3.2.1。

这个组件需要Jquery库的支持,一般情况下,需要添加Jquery的js库,如下所示

<scripttype="text/javascript"src="~/Scripts/jquery-2.0.3.min.js"></script>

不过由于我的Web开发框架是基于EasyUI的,一般在网页的开始就会引用相关的类库,已经包含了Jquery的类库了,如下所示。

@*添加Jquery,EasyUI和easyUI的语言包的JS文件*@<scripttype="text/javascript"src="~/Content/JqueryEasyUI/jquery.min.js"></script>
    <scripttype="text/javascript"src="~/Content/JqueryEasyUI/jquery.easyui.min.js"></script>
    <scripttype="text/javascript"src="~/Content/JqueryEasyUI/locale/easyui-lang-zh_CN.js"></script>

所以我们只需要添加Javascript类库(jquery.uploadify.js),另外加上他的样式文件(uploadify.css)即可:

@*添加对uploadify控件的支持*@
@*
<scripttype="text/javascript"src="~/Scripts/jquery-2.0.3.min.js"></script>*@<scripttype="text/javascript"src="~/Content/JQueryTools/uploadify/jquery.uploadify.js"></script> <linkhref="~/Content/JQueryTools/uploadify/uploadify.css"rel="stylesheet"type="text/css" />

2、上传组件uploadify在Web界面的使用

首先我们需要在HTML代码中放置两个控件,一个是用来上传的控件,一个是用来显示已上传列表的控件,还有就是添加上传和取消上传的按钮操作,如下所示。

 <tr>
                        <th>
                            <labelfor="Attachment_GUID">附件上传:</label>
                        </th>
                        <td>                            
                            <div>
                                <inputclass="easyui-validatebox"type="hidden"id="Attachment_GUID"name="Attachment_GUID" />
                                <inputid="file_upload"name="file_upload"type="file"multiple="multiple">
                                <ahref="javascript:void(0)"class="easyui-linkbutton"id="btnUpload"data-options="plain:true,iconCls:'icon-save'"onclick="javascript: $('#file_upload').uploadify('upload', '*')">上传</a>
                                <ahref="javascript:void(0)"class="easyui-linkbutton"id="btnCancelUpload"data-options="plain:true,iconCls:'icon-cancel'"onclick="javascript: $('#file_upload').uploadify('cancel', '*')">取消</a>

                                <divid="fileQueue"class="fileQueue"></div>
                                <divid="div_files"></div>
                                <br/>
                            </div>
                        </td>
                    </tr>

界面效果初始化如下所示:

当然,下一步我们需要添加相应的文件上传初始化的操作脚本代码,如下所示。

    <scripttype="text/javascript">$(function() {//添加界面的附件管理
$('#file_upload').uploadify({'swf':'/Content/JQueryTools/uploadify/uploadify.swf',//FLash文件路径
                'buttonText':'浏  览',//按钮文本
                'uploader':'/FileUpload/Upload',//处理文件上传Action
                'queueID':'fileQueue',//队列的ID
                'queueSizeLimit':10,//队列最多可上传文件数量,默认为999
                'auto':false,//选择文件后是否自动上传,默认为true
                'multi':true,//是否为多选,默认为true
                'removeCompleted':true,//是否完成后移除序列,默认为true
                'fileSizeLimit':'10MB',//单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值
                'fileTypeDesc':'Image Files',//文件描述
                'fileTypeExts':'*.gif; *.jpg; *.png; *.bmp;*.tif;*.doc;*.xls;*.zip',//上传的文件后缀过滤器
                'onQueueComplete':function(event, data) {//所有队列完成后事件
ShowUpFiles($("#Attachment_GUID").val(),"div_files");//完成后更新已上传的文件列表
$.messager.alert("提示","上传完毕!");//提示完成
},'onUploadStart':function(file) {
$(
"#file_upload").uploadify("settings",'formData', {'folder':'政策法规','guid': $("#Attachment_GUID").val() });//动态传参数 },'onUploadError':function(event, queueId, fileObj, errorObj) {//alert(errorObj.type + ":" + errorObj.info); }
});
</script>

在上面的脚本中,均有注释,一看就明白相关的属性了,不明白的也可以到官方网站去查找了解。值得注意的就是

'uploader': '/FileUpload/Upload'

这行就是提交文件给MVC的Action进行处理,我们在控制器FileUpload的 Upload处理即可。

另外,在附件上传完毕后,我们需要对所在的界面进行更新,以便显示已上传的列表,那么我们需要增加下面的函数处理即可。

'onQueueComplete': function (event, data) {   

最后说明非常值得注意的地方,就是文件上传的时候,我们需要动态获取界面上的一些元素的值,作为参数传递,那么我们就需要在onUploadStart函数中进行如下处理。

$("#file_upload").uploadify("settings", 'formData', { 'folder': '政策法规', 'guid': $("#Attachment_GUID").val() }); //动态传参数

3、上传组件uploadify的C#后台处理代码

在上面的传递参数中,我使用了中文数值,一般情况下,这样会在后台拿到中文乱码,所以我们需要在控制器的Action的函数里面设置它的内容格式,如下所示。

ControllerContext.HttpContext.Request.ContentEncoding = Encoding.GetEncoding("UTF-8");
ControllerContext.HttpContext.Response.ContentEncoding
= Encoding.GetEncoding("UTF-8");
ControllerContext.HttpContext.Response.Charset
= "UTF-8";

控制器FileUpload的后台处理Action代码完整如下所示:

    public classFileUploadController : BaseController
{
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase fileData, string guid, stringfolder)
{
if (fileData != null)
{
try{
ControllerContext.HttpContext.Request.ContentEncoding
= Encoding.GetEncoding("UTF-8");
ControllerContext.HttpContext.Response.ContentEncoding
= Encoding.GetEncoding("UTF-8");
ControllerContext.HttpContext.Response.Charset
= "UTF-8";//文件上传后的保存路径 string filePath = Server.MapPath("~/UploadFiles/");
DirectoryUtil.AssertDirExist(filePath);
string fileName = Path.GetFileName(fileData.FileName); //原始文件名称 string fileExtension = Path.GetExtension(fileName); //文件扩展名 string saveName = Guid.NewGuid().ToString() + fileExtension; //保存文件名称 FileUploadInfo info= newFileUploadInfo();
info.FileData
=ReadFileBytes(fileData);if (info.FileData != null)
{
info.FileSize
=info.FileData.Length;
}
info.Category
=folder;
info.FileName
=fileName;
info.FileExtend
=fileExtension;
info.AttachmentGUID
=guid;
info.AddTime
=DateTime.Now;
info.Editor
= CurrentUser.Name;//登录人//info.Owner_ID = OwerId;//所属主表记录ID CommonResult result= BLLFactory<FileUpload>.Instance.Upload(info);if (!result.Success)
{
LogTextHelper.Error(
"上传文件失败:" +result.ErrorMessage);
}
returnContent(result.Success.ToString());
}
catch(Exception ex)
{
LogTextHelper.Error(ex);
return Content("false");
}
}
else{return Content("false");
}
}
private byte[] ReadFileBytes(HttpPostedFileBase fileData)
{
byte[] data;using (Stream inputStream =fileData.InputStream)
{
MemoryStream memoryStream
= inputStream asMemoryStream;if (memoryStream == null)
{
memoryStream
= newMemoryStream();
inputStream.CopyTo(memoryStream);
}
data
=memoryStream.ToArray();
}
returndata;
}

4、上传组件uploadify在Web开发框架中的界面展示

具体上传组件在的Web开发框架中界面效果如下所示,下图是总体的列表中附件的展示。

附件编辑和上传界面如下所示。

附件信息查看效果如下所示:

本系列文章列表如下:

基于MVC4+EasyUI的Web开发框架的系列文章:

基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍


基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

基于MVC4+EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理

基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

在前面介绍了一些关于最新基于MVC4+EasyUI的Web开发框架文章,虽然Web开发框架的相关技术文章会随着技术的探讨一直写下去,不过这个系列的文章,到这里做一个总结,展示一下整体基于MVC4+EasyUI的界面效果,让大家对这款Web开发框架有一个形象的了解,界面设计以及相关思路可以借鉴提高,也可以对相关的内容进行相互探讨,共同提高。

技术特点:
整个Web开发框架,界面部分采用较新的技术,包括MVC4,最新版本的EasyUI,以及zTree树形控件、Uploadify文件上传组件等模块,另外还结合了打印模块LODOP进行页面打印、文件Word或者Excel导出操作等,数据支持Oracle、SqlServer、MySql、Sqlite、Access等常规数据库,可通过配置进行自由切换,使用Enterprise Library模块进行数据访问的控制,使得数据访问更方便轻松。

控制器设计:
Web开发框架沿用了我的《
Winform开发框架
》的很多架构设计思路和特点,对Controller进行了封装。使得控制器能够获得很好的继承关系,并能以更少的代码,更高效的开发效率,实现Web项目的开发工作,整个控制器的设计思路如下所示。

权限控制:
良好的控制器设计规则,可以为Web开发框架本身提供了很好用户访问控制和权限控制,使得用户界面呈现菜单、Web界面的按钮和内容、Action的提交控制,均能在总体权限功能分配和控制之下。

代码快速生成:
良好的架构使得无论在业务逻辑层、控制器层、Web界面的UI层,均能提供统一的代码逻辑,这些代码均能通过代码生成工具Database2Sharp进行生成。Web界面代码可以充分利用代码生成工具Database2Sharp的元数据信息,实现Web界面的快速生成。有效减少出错的几率,提高Web界面编码的开发效率和乐趣,更可以使得企业内部的编码模式进行高效的统一。

一、登陆及主界面

1、登陆界面

2、框架主体界面

图标样式生成管理

二、行业动态管理

1、政策法规/通知公告/动态信息 列表界面

2、修改内容界面

通知公告的内容编辑界面如下所示。

3、查看详细信息

通知公告的查看详细信息界面如下所示。

4、打印界面

通知公告内容的打印预览界面如下所示,该模块继承了打印控件,因此预览效果非常美观。

5、文件导出到Word或者Excel操作

通知公告可以导出Excel或者Word文件,在MVC控制器端使用aspose.word和aspose.excel控件,使得导出的内容更加美观规范。

二、系统管理

1、用户管理

用户分类,可以根据组织结构进行划分,也可以根据角色进行划分,方便查找。

用户信息编辑界面如下所示,包括了用户基础信息和用户可操作功能,可以查看编辑用户的基础信息,也可以查看该用户具有哪些功能。

查看用户可操作功能,是查看该用户包含角色具有的所有功能集合,这里只能进行查看,如果需要调整用户可操作的功能,可在角色管理模块进行权限分配。

修改用户密码界面如下所示:

2、组织结构管理

为了方便管理,组织机构是以一个树形结构的方式进行展现,组织机构以公司层级进行划分以便实现组织机构的分级管理,每个公司的管理员,只能管理自己公司内部的组织机构关系。

双击任何一个组织机构节点,可以展开机构的详细信息,以及机构的相关信息:包含用户和所属角色。这样可以为组织机构的对应用户,分配具有特定角色,包含人员也就快速具有了对应角色的一切权限。

3、角色管理

角色也是根据公司层级进行分级管理的,一个公司内部,角色名称不能重复。角色管理,包括管理角色的基础信息,角色的可操作功能(功能权限)和可访问数据 (数据权限),并通过制定用户或者机构方式,最终实现用户权限的控制。

角色的权限是分级管理的,超级管理员管理所有的角色功能,具有最大的权限集合,可分配不同公司的管理员权限集合;公司所属的管理员,只具有由超级管理员分配的权限。

角色的可操作功能(功能权限),可以在该角色具有的全部权限上分配功能权限。

可访问数据 (数据权限),是通过绑定角色和组织机构关系,从而实现角色数据权限的控制,业务系统在开发过程中进行整合即可有效控制用户的数据权限。

4、功能管理

为了方便一次性添加多个功能单元,可以通过“批量添加”操作进行功能的批量添加,批量添加界面如下所示。

5、菜单管理

添加菜单界面如下所示。

查看菜单详细信息界面如下所示。

6、登陆日志

7、字典管理

字典管理包括了字典类别的管理和字典数据的管理,通过在界面中集成树控件,单击任何一个节点,均能进行类别字典数据的刷新,然后在右边进行展示,界面如下所示。

在字典类别中添加,弹出一个对话框,并以当前的字典类别作为父类节点,界面如下所示。

修改字典数据的界面如下所示。

查看字典数据的界面如下所示。

除了单项字典数据的添加,有时候,批量添加字典数据也是很方便、很重要的,因此提供了一个批量字典数据录入的界面,如下所示。

城市省份管理

8、图表管理

统计图表是很多应用程序需要拥有的功能,为了更好展示图表的使用操作,框架提供了多种样式的图表演示。

以上就是整个Web框架的部分界面截图,在Web开发过程中,往往会碰到不少细节上的问题,需要搜索很多相关文章进行解决,界面的美观性也进行了特别的完善,力求能够直接使用在具体的项目工程中,而不需要过多的进行处理。

本系列文章列表如下:

基于MVC4+EasyUI的Web开发框架的系列文章:

基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍


基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

基于MVC4+EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理

基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

在上一篇随笔中,我对Web开发框架的总体界面进行了介绍,其中并提到了我的《Web开发框架》的控制器的设计关系,Web开发框架沿用了我的《
Winform开发框架
》的很多架构设计思路和特点,对Controller进行了封装。使得控制器能够获得很好的继承关系,并能以更少的代码,更高效的开发效率,实现Web项目的开发工作,整个控制器的设计思路如下所示。

从上图的设计里面可以看到,我把主要能通过抽象封装的CRUD方法都放到了
BusinessController<B, T>
类里面,本文继续详细介绍这个Web框架控制器类的CRUD具体实现,以便使得大家了解我的整个Web开发框架的基类控制器的工作原理。

1、基类的插入操作

我们知道,一般常规的插入操作是很普遍的操作,那么我们在MVC的Web界面上是如何调用的,后台又是如何进行数据的处理的呢?

在MVC的View视图代码里面,我们添加数据的时候,javascript脚本代码是这样的:

                var postData = $("#ffAdd").serializeArray();
$.post(
"/Information/Insert", postData, function (data) {if (data = "true") {//添加成功 1.关闭弹出层,2.刷新DataGird $.messager.alert("提示", "添加成功");
$(
"#DivAdd").dialog("close");
$(
"#grid").datagrid("reload");
$(
"#ffAdd").form("clear");//本页面的类型为【通知公告】,固定不变 $("#Category").val("通知公告");
}
else{
$.messager.alert(
"提示", "添加失败,请您检查");
}
});

其中的serializeArray就把该表单要提交的数据序列号到一个字符串里面了,里面的数据可能类似A=a&B=b&C=c 这样的字符串里面了,通过POST调用控制器Information的Insert方法,实现数据的插入。由于控制器Information是具体业务类,因此它继承自
BusinessController<B, T>,
也就是会调用BusinessController<B, T>控制器的Insert方法。

如字典数据添加的界面如下所示。

那么后台的接收方法如何呢?其实后台是把数据序列化到了一个FormCollection对象的集合里面了,但是,我们还可以使用对象T(实体类),让这些数据集合赋值给对应的实体对象属性,如下就是我的后台控制器的插入方法,它的参数是一个实体类T,这样我们直接调用业务操作类就可以插入了,代码很简单易懂。

        /// <summary>
        ///插入指定对象到数据库中/// </summary>
        /// <param name="info">指定的对象</param>
        /// <returns>执行操作是否成功。</returns>
        public virtualActionResult Insert(T info)
{
bool result = false;if (info != null)
{
result
=baseBLL.Insert(info);
}
returnContent(result);
}

2、基类的更新操作

上面我们看了插入数据的操作,可能大家对下面介绍的数据更新操作,可能也已经有了一些了解了,其实它和插入操作的方法很类似的。

更新操作的
视图
View中脚本代码如下所示, 它通过控制器Information的Update方法进行更新数据。

                var ID = $("#ID1").val();var postData = $("#ffEdit").serializeArray();
$.post(
"/Information/Update?ID=" +ID, postData, function (date) {if (date == "true") {//修改成功,关闭弹出层,刷新DataGird $.messager.alert("提示", "修改成功");
$(
"#DivEdit").dialog('close');
$(
"#grid").datagrid("reload");
}
else{
$.messager.alert(
"提示", "修改失败,请您检查");
}
});

由于控制器Information是具体业务类,因此它继承自
BusinessController<B, T>,
也就是会调用BusinessController<B, T>控制器的Update方法。

和上面的插入操作一样,后台是把数据序列化到了一个FormCollection对象的集合里面了,我们可以使用类似和插入方法的操作,如下所示。

        /// <summary>
        ///更新对象属性到数据库中/// </summary>
        /// <param name="info">指定的对象</param>
        /// <param name="id">主键ID的值</param>
        /// <returns>执行成功返回<c>true</c>,否则为<c>false</c></returns>
        public virtual ActionResult Update(T info, stringid)
{
bool result =baseBLL.Update(info, id);returnContent(result);
}

但是,如果使用以上的代码作为更新数据的代码,那么在编辑界面里,如果只是显示编辑部分表的数据,那么可能导致很多属性会被初始化为实体类的默认值,显然这样不符合我们的要求,我们
可能只是进行部分更新
,那么我们进行部分更新的控制器方法应该如何设计呢?

前面我们说到,数据会被序列号到一个FormCollection对象集合里面,更新方法也一样,那么我们可以把更新操作的接口定义为如下代码所示,视图操作代码不变化:

        /// <summary>
        ///更新对象属性到数据库中/// </summary>
        /// <param name="info">指定的对象</param>
        /// <param name="id">主键ID的值</param>
        /// <returns>执行成功返回<c>true</c>,否则为<c>false</c></returns>
        public virtual ActionResult Update(string id, FormCollection formValues)

我们可以通过调试的方法,查询到FormCollection里面的值就是我们更新界面里面的数据(
注意:可能是实体类的部分数据
)。但使用了这个方法后,我们还需要把FormCollection对象里面的数据转换为实体类的信息,我们才好调用BaseBLL里面的接口进行更新数据。但是不同的实体类,有不同的属性,我们如何能够抽象把他们的属性都赋值了呢?

答案是通过反射属性方式,把FormCollection里面属性的值赋值给对应实体类属性的值。下面我们来介绍下具体的代码实现了。

        /// <summary>
        ///更新对象属性到数据库中/// </summary>
        /// <param name="info">指定的对象</param>
        /// <param name="id">主键ID的值</param>
        /// <returns>执行成功返回<c>true</c>,否则为<c>false</c></returns>
        public virtual ActionResult Update(stringid, FormCollection formValues)
{

T obj
=baseBLL.FindByID(id);if (obj != null)
{
//遍历提交过来的数据(可能是实体类的部分属性更新) foreach (string key informValues.Keys)
{
string value =formValues[key];
System.Reflection.PropertyInfo propertyInfo
=obj.GetType().GetProperty(key);if (propertyInfo != null)
{
try{//obj对象有key的属性,把对应的属性值赋值给它(从字符串转换为合适的类型)//如果转换失败,会抛出InvalidCastException异常 propertyInfo.SetValue(obj, Convert.ChangeType(value, propertyInfo.PropertyType), null);
}
catch{ }
}
}
}
bool result =baseBLL.Update(obj, id);returnContent(result);
}

通过对象propertyInfo的SetValue方法,可以把字符串的值,转换为实体类对应属性类型的值,顺利进行赋值。

如果是业务类需要提交一些HTML的代码,那么我们需要在具体的业务类里面,重写插入、更新方法并设置一下 [ValidateInput(false)] 标识才可以。

        [ValidateInput(false)]public overrideActionResult Insert(InformationInfo info)
{
info.Editor
=CurrentUser.Name;
info.EditTime
=DateTime.Now;return base.Insert(info);
}

[ValidateInput(
false)]public override ActionResult Update(stringid, FormCollection formValues)
{
return base.Update(id, formValues);
}

如通知公告的内容编辑界面如下所示。

3、基类的获取对象数据方法

我们在很多接口里面,都要求获取单一对象的数据信息,我在基类接口里面定义了一个FindByID方法,就是从业务对象里面,根据主键ID信息,获取一个对象的数据,把他转换为Json传递到View视图里面使用即可。

        /// <summary>
        ///查询数据库,检查是否存在指定ID的对象/// </summary>
        /// <param name="id">对象的ID值</param>
        /// <returns>存在则返回指定的对象,否则返回Null</returns>
        public virtual ActionResult FindByID(stringid)
{
ActionResult result
= Content("");
T info
=baseBLL.FindByID(id);if (info != null)
{
result
=JsonDate(info);
}
returnresult;
}

其中的JsonDate方法是为了避免日期类型的数值在序列化中出现错误格式,包装的一个方法,如下所示。

        /// <summary>
        ///返回处理过的时间的Json字符串/// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public ContentResult JsonDate(objectdate)
{
var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss"};returnContent(JsonConvert.SerializeObject(date, Formatting.Indented, timeConverter));
}

在View视图里面使用控制器方法,绑定数据到查看界面里面的代码如下所示。

        //绑定查看详细信息的方法
function BindViewInfo() {var ID = $("#grid").datagrid('getSelections')[0].ID;//发送请求
            $.getJSON("/Information/FindByID?r=" + Math.random() + "&id=" +ID, function (info) {
$(
"#ID2").val(info.ID);
$(
"#Title2").text(info.Title);
$(
"#Content2").html(info.Content);
$(
"#Attachment_GUID2").text(info.Attachment_GUID);
$(
"#Editor2").text(info.Editor);
$(
"#EditTime2").text(info.EditTime);

ShowUpFiles(info.Attachment_GUID,
'divViewAttach');
});
}

具体效果如下所示:

4、基类删除操作方法

在GridView里面,我们提供了删除数据的按钮,具体视图里面使用的代码如下所示。

                //然后确认发送异步请求的信息到后台删除数据
                $.messager.confirm("删除确认", "您确认删除选定的记录吗?", function (deleteAction) {if(deleteAction) {
$.
get("/Information/DeletebyIds", postData, function (data) {if (data == "true") {
$.messager.alert(
"提示", "删除选定的记录成功");
$(
"#grid").datagrid("reload"); }else{
$.messager.alert(
"提示", data);
}
});
}
});

后台控制器的基类删除方法如下所示。

        /// <summary>
        ///删除多个ID的记录/// </summary>
        /// <param name="ids">多个id组合,逗号分开(1,2,3,4,5)</param>
        /// <returns></returns>
        public virtual ActionResult DeleteByIds(stringids)
{
bool result = false;if (!string.IsNullOrEmpty(ids))
{
string[] idArray = ids.Split(new char[] { ','});foreach (string strId inidArray)
{
if (!string.IsNullOrEmpty(strId))
{
baseBLL.Delete(strId);
}
}
result
= true;
}
returnContent(result);
}

以上就是基类控制器增删改查的一些通用方法的封装,业务对象控制器类,如果有特殊的需要,可以对方法进行重写即可,非常方便使用,从而减少了很多重复编写的代码,并可以使得页面的操作统一化,提高生产效率。

基于MVC4+EasyUI的Web开发框架的系列文章:

基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍


基于MVC4+EasyUI的Web开发框架形成之旅--MVC控制器的设计

基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

基于MVC4+EasyUI的Web开发框架形成之旅--框架总体界面介绍

基于MVC4+EasyUI的Web开发框架形成之旅--基类控制器CRUD的操作

基于MVC4+EasyUI的Web开发框架形成之旅--权限控制

基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

基于MVC4+EasyUI的Web开发框架经验总结(3)- 使用Json实体类构建菜单数据

基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

基于MVC4+EasyUI的Web开发框架经验总结(5)--使用HTML编辑控件CKEditor和CKFinder

基于MVC4+EasyUI的Web开发框架经验总结(6)--在页面中应用下拉列表的处理

基于MVC4+EasyUI的Web开发框架经验总结(7)--实现省份、城市、行政区三者联动

基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览

基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式

基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

神经外科病人资料管理系统

神经外科病人资料管理系统,该软件管理科室相关资料,包括病人资料、随访信息、科室人员资料、光盘录像带资料等科室日常数据,软件支持丰富的查询检索、数据导入导出、高级查询、统计报表、列表打印,以及字典数据管理、数据库备份恢复等功能,是一款优秀易用的患者数据管理软件。

下载
购买

★系统需求

该软件使用C#语言开发,适运行在 Windows 7/Vista/2000/XP/2003 等平台,但必须安装有.Net4.0平台。 如果您的计算机不能运行本程序,强烈建议您下载 .NET 4.0 运行库。 .NET Framework 4.0 官方下载地址:
http://www.microsoft.com/zh-cn/download/details.aspx?id=17718

★软件注册

该软件是一款共享软件,您可以自由发布和传播软件,未注册版本会在使用20天后过期。在带给您方便的同时, 希望您能考虑注册这款软件,注册软件的时候请提供软件的机器码。如果您在电脑报刊发表了介绍这个软件的文章,将刊物名称和期号告诉我,我们将免费为您提供注册码。

该软件版权归"
广州爱奇迪软件科技有限公司
"所有,作者保留该软件所有权利,未注册用户不得将该软件用于商业用途。

系统界面截图介绍

软件登陆界面截图如下:

软件主界面截图如下,患者资料里面包括了常规的查询数据项,包括查询按钮、高级查询、新建、导入、导出功能项,其中导出是把列表中的病人基本资料数据导出到Excel进行展示,导入是把一些病人资料以固定的Excel模板格式进行批量导入。
软件除了病人资料管理外,还包括了病人数据报表、科室人员信息、光盘录像带管理、数据字典、数据备份与恢复、密码修改等一些列功能。

在主界面中“新建”、或双击记录“编辑”病人资料,会弹出下面新建或者编辑病人料的对话框,其中包括了病人资料的基本信息、随访情况等信息管理。 其中病人基本信息界面如下所示,输入身份证,可以自动填写用户的出生日期、年龄、性别信息。

在病人资料的编辑对话框中,还可以记录病人的随访资料,界面如下所示。

系统在主界面的病人资料管理中,由于界面的限制,数据查询项只是列出一些常规重要的查询项目,如果需要进行更多条件的查询,可以通过病人资料的“高级查询”按钮进行,在弹出的高级查询对话框中,里面列出了所有病人资料的数据项目,可以双击列表进行条件设置,界面如下所示。


为了对一些病人资料的数据进行报表化展示,软件在“病人数据报表”模块里面添加了对“回访率统计”、“主管教授病人统计”、”病人数据状态统计“、“病人年龄段”、”病人性别统计“、”病人资料汇报统计“等常规项目,以及一个”病人数据动态统计项目“,界面如下所示。


在病人数据动态统计报表模块里面,可以根据入院时间,出院时间,对其中的入院诊断、最后诊断、肿瘤部位、病理诊断几项的内容进行统计分析,统计项目可以从列表中选择,也可以手动添加内容,界面效果如下所示。


另外,系统也提供了对科室人员的信息管理,方便对本科室的主任、教授、医生等相关人员的信息进行登记和管理,界面效果如下所示。

新建人员基本信息的界面如下所示。


人员信息登记的资料,可以通过 “导出Word文档” 的功能按钮,把系统里面的人员信息以固定的表格格式导出到Word里面,方便打印和备份记录,生成的文档界面如下所示。


软件还可以对科室里面的光盘、录像带、蓝光光盘等资料进行管理,其中CD光盘资料的管理界面如下所示。

整个系统有一些相关的字典数据,可以通过系统数据字典进行维护管理,界面如下所示。

软件还具备对数据库的备份和恢复,可以对系统重要的数据进行有效的备份管理。