二、利用EnterpriseFrameWork快速开发Web系统(B/S)
EnterpriseFrameWork框架实例源代码下载: 实例下载
本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题。实例功能就是业务系统中最常见的增、删、改、查来演示,用一个界面来管理自己的书籍,包括书籍名称、购买的价格、购买的时间、是否丢失;
步骤:数据库建表->新建项目->完成后台逻辑层代码->编写Web界面中的aspx和js代码,经过以上几个步骤完成代码的编写,之后只要调整配置文件,调试好程序就行啦。
本文要点:
1.Web版界面效果
2.Web项目开发步骤
3.代码文件调用关系图
4.常见问题汇总
1.先看看完成后的界面效果
2.开发步骤
1)数据库建表,贴出建表脚本
CREATE TABLE [Books] ( [Id] [int] NOT NULL IDENTITY(1, 1), [BookName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL, [BuyPrice] [decimal] (18, 2) NULL, [BuyDate] [datetime] NULL, [Flag] [smallint] NULL CONSTRAINT [DF_Books_Flag] DEFAULT ((0)) ) ON [PRIMARY] GO
2)新建项目,同时引用好几个比要的程序集
3)完成后台逻辑层代码,主要包括Dao、实体和Web控制器,ObjectModel在实例中不会用到,因为太简单了没有必要用到它,用它只会让你的代码变得复杂;
我们先讲实体的代码,实体主要是在使用框架的ORM功能的必要代码,它把数据库表的所有字段都映射到实体的属性上,这样我们代码中操作数据库表的数据无需写sql,只需操作实体即可。下面看实体的代码,重点就是自定义标签的配置信息,详细用法会再后面的系列中介绍;还有就是所有实体都必须继承核心类库中的AbstractEntity对象。
Book.cs文件
using EFWCoreLib.CoreFrame.BusinessArchitecture.Orm; namespace Books.Entity { [Serializable] [Table(TableName = "Books", EntityType = EntityType.Table, IsGB = true)] public class Book : EFWCoreLib.CoreFrame.BusinessArchitecture.AbstractEntity { private int id; [Column(FieldName = "Id", DataKey = true, Match = "", IsInsert = false)]
//主键
public int Id { get { return id; } set { id = value; } } private string bookName; [Column(FieldName = "BookName", DataKey = false, Match = "", IsInsert = true)] public string BookName { get { return bookName; } set { bookName = value; } } private decimal buyPrice; [Column(FieldName = "BuyPrice", DataKey = false, Match = "", IsInsert = true)] public decimal BuyPrice { get { return buyPrice; } set { buyPrice = value; } } private DateTime buyDate; [Column(FieldName = "BuyDate", DataKey = false, Match = "", IsInsert = true)] public DateTime BuyDate { get { return buyDate; } set { buyDate = value; } } private int flag; [Column(FieldName = "Flag", DataKey = false, Match = "", IsInsert = true)] public int Flag { get { return flag; } set { flag = value; } } } }
接着看Dao的编写,Dao主要是编写ORM之外的一些数据库操作SQL脚本,所有的Dao都必须继承核心类库中的AbstractDao对象
bookDao.cs文件
namespace Books.Dao { public class BookDao : EFWCoreLib.CoreFrame.BusinessArchitecture.AbstractDao { public DataTable GetBooks(string searchChar, int flag) { string strsql = @"SELECT * FROM dbo.Books WHERE BookName LIKE '%{0}%' AND Flag={1}"; strsql = string.Format(strsql, searchChar, flag);
//oleDb是继承的父类中的操作数据库的对象
return oleDb.GetDataTable(strsql); } } }
最后Web控制器的编写,控制器起着承上启下的作用,界面的请求都是具体到控制器中的某个方法,方法中调用上面的实体或Dao,再输出json数据返回给界面;一般来说一个控制器对应业务中的一个用列;所有控制器必须继承核心类库中的AbstractJqueryController对象
bookController.cs文件
namespace Books.WebController { [WebController]//是web控制器必须加上次标签 public class bookController : EFWCoreLib.WebFrame.Controller.AbstractJqueryController { [WebMethod] public void SaveBook() {
//从Http请求中的from表单里的数据复制到book对象
Book book = GetModel<Book>();
//更新到数据库中
book.save();
//返回界面提示
TxtJson = ReturnSuccess("保存书籍成功!"); } [WebMethod] public void SearchBook() { string schar = ParamsData["schar"]; int flag = Convert.ToInt32(ParamsData["flag"]); BookDao bdao = NewDao<BookDao>();
//调用Dao里面的操作
DataTable dt = bdao.GetBooks(schar, flag);
//返回数据到界面网格
TxtJson = ToGridJson(dt); } } }
4)编写Web界面中的aspx和js代码,其中aspx文件为HTML界面代码,JS文件主要为向后台发送请求的操作代码;界面框架用的是JqueryEasyUI,不了解此界面框架的可以网上学习下,也是一个用起来很简单的框架;当然界面框架不一定就只能用JqueryeasyUI,其他的一样都可以一起使用;
使用JqueryEasyUI框架aspx页面必须先引用这些文件;
Book.aspx文件代码
<%@ Page Language="C#" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>书籍管理</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<link rel="stylesheet" type="text/css" href="../../../WebPlugin/jquery-easyui-1.3.4/themes/default/easyui.css"/>
<link rel="stylesheet" type="text/css" href="../../../WebPlugin/jquery-easyui-1.3.4/themes/icon.css"/>
<script type="text/javascript" src="../../../WebPlugin/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="../../../WebPlugin/jquery-easyui-1.3.4/jquery.easyui.min.js"></script>
<script type="text/javascript" src="../../../WebPlugin/jquery-easyui-1.3.4/locale/easyui-lang-zh_CN.js"></script>
<script src="../../../WebPlugin/JQueryCommon2.0.js" type="text/javascript"></script>
<script src="Book.js" type="text/javascript"></script>
</head>
<body class="easyui-layout">
<div region="center" style="overflow:hidden;">
<div id="grid-tool">
<table cellpadding="0" cellspacing="0" style="width:100%">
<tr>
<td style="padding-left:2px">
<a href="#" class="easyui-linkbutton" plain="true" iconCls="icon-add" onclick="btn_add();">新增</a>
<a href="#" class="easyui-linkbutton" plain="true" iconCls="icon-edit" onclick="btn_alter();">修改</a>
</td>
<td style="text-align:right;padding-right:2px">
<input class="easyui-searchbox" data-options="prompt:'请输入书籍名称'" style="width:250px"></input>
</td>
</tr>
</table>
</div>
<table id="bookGird" class="easyui-datagrid" toolbar="#grid-tool" fit="true" border="false" singleSelect="true">
<thead>
<tr>
<th field="Id" width="100">序号</th>
<th field="BookName" width="80">书籍名称</th>
<th field="BuyPrice" width="120">购书价格</th>
<th field="BuyDate" width="200">购书时间</th>
<th field="Flag" width="80">是否丢失</th>
</tr>
</thead>
</table>
</div> <%--弹出窗界面--%>
<div id="dialog-book" title="新增书籍" class="easyui-dialog" icon="icon-save" style="background:#fafafa;padding:10px;width:350px;height:250px;" buttons="#dlg-buttons1" resizable="true" modal="true">
<form id="bookform" method="post">
<table>
<tr>
<td><label>书籍名称:</label></td>
<td><input name="BookName" class="easyui-validatebox" style="width:200px;" type="text" required="true"></input></td>
</tr>
<tr>
<td><label>购书价格:</label></td>
<td><input name="BuyPrice" class="easyui-validatebox" style="width:200px;" type="text" required="true"></input></td>
</tr>
<tr>
<td><label>购书日期:</label></td>
<td><input name="BuyDate" class="easyui-datebox" style="width:200px;" type="text" required="true"></input></td>
</tr>
<tr>
<td><label>是否丢失:</label></td>
<td><input id="_flag" type="checkbox"/></td>
</tr>
</table>
<input id="book_id" type="hidden" name="Id" ></input>
<input id="book_flag" type="hidden" name="Flag" ></input>
</form>
</div>
<div id="dlg-buttons1">
<a href="#" class="easyui-linkbutton" onclick="btn_save();">确定</a>
<a href="#" class="easyui-linkbutton" onclick="$('#dialog-book').dialog('close');">取消</a>
</div>
</body>
</html>
Book.JS文件代码
//初始化入口
$(function() {
$('#dialog-book').dialog('close');
//加载网格数据
$('#bookGird').datagrid('options').url = 'Controller.aspx?controller=bookController&method=SearchBook&schar=&flag=0';
//$('#bookGird').datagrid('reload');
});
//添加
function btn_add(){
$('#dialog-book').dialog({ title: '新增书籍' });
$("#bookform").form('clear');
$("#book_id").val(0);
$("#book_flag").val(0);
$("#_flag").removeAttr("checked");
}
//修改
function btn_alter(){
$('#dialog-book').dialog({ title: '修改书籍' });
var selected = $('#bookGird').datagrid('getSelected');
if (selected) {
$("#bookform").form("load", selected); if (selected.Flag == "1")
$("#_flag").attr("checked", "true");
else
$("#_flag").removeAttr("checked");
}
}
//保存
function btn_save() {
var ckval=$("#_flag").attr("checked")=="checked"?1:0;
$('#book_flag').val(ckval);
formSubmit('#bookform', 'Controller.aspx?controller=bookController&method=SaveBook', function() {
$('#dialog-book').dialog('close');
$('#bookGird').datagrid('reload');
});
}
说明一下下面向后台发ajax请求Url地址的参数意思:
$('#bookGird').datagrid('options').url = 'Controller.aspx?controller=bookController&method=SearchBook&schar=&flag=0';
Controller.aspx 框架内置的请求解析文件
controller=bookController 参数controller指定了后台的控制器类名
method=SearchBook 参数method指定了控制器中的方法名
schar=&flag=0 传递的两个参数schar和flag
3.最后我们看下图,整理一下以上代码文件的调用关系
4.常见问题汇总:
1)数据库连接配置修改
2)Web.config配置中不要忘记添加Books.dll
3)因为界面是在测试环境下运行,一定要把Web.config中的TurnOnLoginRight参数关闭
EnterpriseFrameWork框架实例源代码下载: 实例下载
二、利用EnterpriseFrameWork快速开发Web系统(B/S)的更多相关文章
- 三、利用EnterpriseFrameWork快速开发Winform系统(C/S)
EnterpriseFrameWork框架实例源代码下载: 实例下载 上一章讲解了开发Web系统的详细步骤,以书籍的管理作实例实现对书籍的增.删.改.查功能,本章接着上面的实例继续补充用Winform ...
- 四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统
回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 本章内容与上一张<利用Enterprise ...
- 五、利用EnterpriseFrameWork快速开发基于WebServices的接口
回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWo ...
- Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架
Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...
- 开发者如何利用工具快速开发出完美APP
文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...
- python快速开发Web之Django
以前写测试框架,要么是纯python代码驱动的,要么是WinForm界面的框架,多人操作并不适合. 就想用python写个Web版的,于是想到了Web快速开发的框架Flask和Django两个 个人觉 ...
- 从零开始,使用python快速开发web站点(1)
环境:ubuntu 12.04 python版本: 2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, (ubuntu 或 ...
- 利用JQuery Mobile开发web app
什么是web app web app 是基于web的应用程序,是针对移动设备优化后的web站点,它具有 开发成本低——采用web开发技术,不需要考虑跨平台以及底层适配问题: 升级简单——不需要通知用户 ...
- java 利用JAX-RS快速开发RESTful 服务
JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...
随机推荐
- PHP整数转小数
sprintf('%.2f',$memrow['yjrebate1']+$memrow['yjrebate2'])
- PHP去重可用
//国外 $arr6 = array_merge($arr2,$arr4); $arr8 = array(); $arr10 = array(); foreach($arr6 as $k6=> ...
- disconf实践(一)Ubuntu16.04部署disconf
在企业中,随着公司业务的扩张,用户量的增大,单一节点应用无法支撑正常的业务逻辑,比较常见的现象是访问速度变慢,甚至超时,严重时可能会造成系统宕机.为了尽量减少宕机的风险,单一节点系统需要进行水平扩展, ...
- OC中的内省(Introspection)方法
我们在写OC代码的时候经常用到:isKindOfClass: 一类的方法,但是对于它并没有一个了解,这里也是从网上搜索了一些内容,简单介绍并记录一下.这类方法就是属于OC的特性之一:内省. 内省(In ...
- EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除
原文链接:http://blog.csdn.net/fanbin168/article/details/51485969 批量插入 (17597条数据批量插入耗时1.7秒) using Sys ...
- Vue中使用webpack别名的方法
在工作中,我们经常会写出这种代码: import MHeader from '../../components/m-header/m-header' @import "../../commo ...
- Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢
在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中
- 将Vue插件发布到npm的完整记录
前言 面对越来越多的组件库,越开越多的ui库,学会发布库已经是前端必须会的事情了,也算是为开源贡献一份力量,在网络上看了一些前者的文章,也算的发布成功了,虽然还存在很多问题,路不积跬步,无以至千里 ...
- 大数据学习之Hadoop运行模式
一.Hadoop运行模式 (1)本地模式(默认模式): 不需要启用单独进程,直接可以运行,测试和开发时使用. (2)伪分布式模式: 等同于完全分布式,只有一个节点. (3)完全分布式模式: 多个节点一 ...
- 大数据:Map终结和Spill文件合并
当Mapper没有数据输入,mapper.run中的while循环会调用context.nextKeyValue就返回false,于是便返回到runNewMapper中,在这里程序会关闭输入通道和输出 ...