二、利用EnterpriseFrameWork快速开发Web系统(B/S)

EnterpriseFrameWork框架实例源代码下载: 实例下载

   

      本章通过一个开发实例来讲解Web系统的开发经过,以及会碰到的一些问题。实例功能就是业务系统中最常见的增、删、改、查来演示,用一个界面来管理自己的书籍,包括书籍名称、购买的价格、购买的时间、是否丢失;

      步骤:数据库建表->新建项目->完成后台逻辑层代码->编写Web界面中的aspxjs代码,经过以上几个步骤完成代码的编写,之后只要调整配置文件,调试好程序就行啦。

本文要点:

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
View Code

 

      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; }

        }

    }

}
View Code

 

      接着看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);

        }

    }

}
View Code

 

      最后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);

        }

    }

}
View Code

 

      4)编写Web界面中的aspxjs代码,其中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>
View Code

 

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');
                    });
}
View Code

 

       说明一下下面向后台发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框架实例源代码下载: 实例下载

posted @ 2014-08-27 21:59  kakake  阅读(4318)  评论(7编辑  收藏  举报