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)的更多相关文章

  1. 三、利用EnterpriseFrameWork快速开发Winform系统(C/S)

    EnterpriseFrameWork框架实例源代码下载: 实例下载 上一章讲解了开发Web系统的详细步骤,以书籍的管理作实例实现对书籍的增.删.改.查功能,本章接着上面的实例继续补充用Winform ...

  2. 四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 本章内容与上一张<利用Enterprise ...

  3. 五、利用EnterpriseFrameWork快速开发基于WebServices的接口

    回<[开源]EnterpriseFrameWork框架系列文章索引> EnterpriseFrameWork框架实例源代码下载: 实例下载 前面几章已完成EnterpriseFrameWo ...

  4. Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstrap 是由 Twitter 的 ...

  5. 开发者如何利用工具快速开发出完美APP

    文|移动互联网李建华 微信:ydhlwdyq 传统的个人开发者,要想开发出一个完美的APP要 经过以下几个过程:搭建开发环境,写代码,写统计系统,开发即将完成后,要购买服务器,然后把程序布置到服务器上 ...

  6. python快速开发Web之Django

    以前写测试框架,要么是纯python代码驱动的,要么是WinForm界面的框架,多人操作并不适合. 就想用python写个Web版的,于是想到了Web快速开发的框架Flask和Django两个 个人觉 ...

  7. 从零开始,使用python快速开发web站点(1)

    环境:ubuntu 12.04 python版本:  2.73 ok,首先,既然是从零开始,我们需要的是一台可以运行的python的计算机环境,并且假设你已经安装好了python, (ubuntu 或 ...

  8. 利用JQuery Mobile开发web app

    什么是web app web app 是基于web的应用程序,是针对移动设备优化后的web站点,它具有 开发成本低——采用web开发技术,不需要考虑跨平台以及底层适配问题: 升级简单——不需要通知用户 ...

  9. java 利用JAX-RS快速开发RESTful 服务

    JAX-RS(Java API for RESTful Web Services)同样也是JSR的一部分,详细规范定义见 https://jcp.org/en/jsr/detail?id=311 .从 ...

随机推荐

  1. PHP整数转小数

    sprintf('%.2f',$memrow['yjrebate1']+$memrow['yjrebate2'])

  2. PHP去重可用

    //国外 $arr6 = array_merge($arr2,$arr4); $arr8 = array(); $arr10 = array(); foreach($arr6 as $k6=> ...

  3. disconf实践(一)Ubuntu16.04部署disconf

    在企业中,随着公司业务的扩张,用户量的增大,单一节点应用无法支撑正常的业务逻辑,比较常见的现象是访问速度变慢,甚至超时,严重时可能会造成系统宕机.为了尽量减少宕机的风险,单一节点系统需要进行水平扩展, ...

  4. OC中的内省(Introspection)方法

    我们在写OC代码的时候经常用到:isKindOfClass: 一类的方法,但是对于它并没有一个了解,这里也是从网上搜索了一些内容,简单介绍并记录一下.这类方法就是属于OC的特性之一:内省. 内省(In ...

  5. EF结合SqlBulkCopy实现高效的批量数据插入 |EF插件EntityFramework.Extended实现批量更新和删除

    原文链接:http://blog.csdn.net/fanbin168/article/details/51485969   批量插入 (17597条数据批量插入耗时1.7秒)   using Sys ...

  6. Vue中使用webpack别名的方法

    在工作中,我们经常会写出这种代码: import MHeader from '../../components/m-header/m-header' @import "../../commo ...

  7. Spring MVC中如何解决POST请求中文乱码问题,GET的又如何处理呢

    在web.xml中配置过滤器 GET请求乱码解决: 在Tomcat中service.xml中

  8. 将Vue插件发布到npm的完整记录

    前言 ​ 面对越来越多的组件库,越开越多的ui库,学会发布库已经是前端必须会的事情了,也算是为开源贡献一份力量,在网络上看了一些前者的文章,也算的发布成功了,虽然还存在很多问题,路不积跬步,无以至千里 ...

  9. 大数据学习之Hadoop运行模式

    一.Hadoop运行模式 (1)本地模式(默认模式): 不需要启用单独进程,直接可以运行,测试和开发时使用. (2)伪分布式模式: 等同于完全分布式,只有一个节点. (3)完全分布式模式: 多个节点一 ...

  10. 大数据:Map终结和Spill文件合并

    当Mapper没有数据输入,mapper.run中的while循环会调用context.nextKeyValue就返回false,于是便返回到runNewMapper中,在这里程序会关闭输入通道和输出 ...