二、利用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'])
- PAT——1035. 插入与归并
根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到全部元素有序. 归并排序进行如下迭 ...
- C编程规范, 演示样例代码。
/*************************************************************** *Copyright (c) 2014,TianYuan *All r ...
- springmvc整合mybatis框架源码 bootstrap html5 mysql oracle maven SSM
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- GPUImage源码解读之GLProgram
简述 GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能.其实是作者对OpenGL ES program的面向对象封装 初始化 - (id)i ...
- P1015 回文数解题思路(非原创)
测试 #include<bits/stdc++.h> using namespace std; int n,m,step; string nn; int len,nex; bool dfs ...
- 【模板】区间dp
有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子合并为1堆.在合并的过程中只能每次将相邻的两堆石子合并,每次合并的花费为这两堆石子之和,求合并成1堆的最小花费. dp[i][j]表示将区间[i ...
- CentOS7.6离线安装Redis5.0.4
安装gcc-c++: 检查是否存在gcc-c++:rpm -qa|grep gcc-c++ 如果不存在就下载Linux-GC-C++文件: 访问镜像网站:http://mirrors.aliyun.c ...
- Redis 之持久化
目录 一.前言 二.持久化类型之 RDB 三.持节化类型之AOF 四.Redis 持久化类型的抉择 五.持久化的恢复 六.持久化问题的分析定位与优化 七.回顾总结 一.前言 首先,来回顾下前面文章的知 ...
- python 消息队列-rabbitMQ 和 redis介绍使用
1.rabbitMQ 与ptyhon 进程queue 区别.进程queue 主要用户Python父子进程之间或者统一进程不同子进程.rabbit可以用户不同语言之前的相互交流,socket可以实现同样 ...