從零開始編寫本身的C#框架(17)——Web層後端首頁

原文:從零開始編寫本身的C#框架(17)——Web層後端首頁php

  後端首頁是管理員登錄後進入的第一個頁面,主要是顯示當前登錄用戶信息、在線人數、菜單樹列表、相關功能按鍵和系統介紹。讓管理員能更方便的找到息想要的內容。css

  根據不一樣系統的須要,首頁會顯示不一樣的內容,好比顯示公司公告、公司新聞、內部短消息、我的事務、各類業務提醒......等各類內容,這些你們能夠須要去進行呈現。html

  

  先上代碼node

  Main.aspxgit

  1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Main.aspx.cs" Inherits="Solution.Web.Managers.Main" %>
  2 
  3 <!DOCTYPE html>
  4 <html xmlns="http://www.w3.org/1999/xhtml">
  5 <head id="Head2" runat="server">
  6     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7     <title>從零開始編寫本身的C#框架——後端管理系統</title>
  8     <style type="text/css">
  9         body.f-theme-neptune .header
 10         {
 11             background-color: #005999;
 12             border-bottom: 1px solid #1E95EC;
 13         }
 14         
 15         body.f-theme-neptune .header .x-panel-body
 16         {
 17             background-color: transparent;
 18         }
 19         
 20         body.f-theme-neptune .header .title a
 21         {
 22             font-weight: bold;
 23             font-size: 24px;
 24             text-decoration: none;
 25             line-height: 50px;
 26             margin-left: 10px;
 27         }
 28         .label
 29         {
 30             color: #80ACCC;
 31         }
 32         .content
 33         {
 34             color: #fff;
 35         }
 36     </style>
 37 </head>
 38 <body>
 39     <form id="form1" runat="server">
 40     <f:PageManager ID="PageManager1" AutoSizePanelID="regionPanel" runat="server" />
 41     <f:Timer ID="Timer1" Interval="60" Enabled="false" OnTick="Timer1_Tick" runat="server">
 42     </f:Timer>
 43     <f:RegionPanel ID="regionPanel" ShowBorder="false" runat="server">
 44         <Regions>
 45             <f:Region ID="regionTop" ShowBorder="false" ShowHeader="false" Position="Top" Layout="Fit"
 46                 runat="server">
 47                 <Toolbars>
 48                     <f:Toolbar ID="Toolbar1" Position="Bottom" runat="server" CssClass="topbar content"
 49                         CssStyle="border-bottom: 1px solid #1E95EC;background-color: #005999;">
 50                         <Items>
 51                             <f:ToolbarText Text="歡迎您:" runat="server" CssClass="label">
 52                             </f:ToolbarText>
 53                             <f:ToolbarText ID="txtUser" runat="server" CssClass="content">
 54                             </f:ToolbarText>
 55                             <f:ToolbarText Text="部門:" runat="server" CssClass="label">
 56                             </f:ToolbarText>
 57                             <f:ToolbarText ID="txtBranchName" runat="server" CssClass="content">
 58                             </f:ToolbarText>
 59                             <f:ToolbarText Text="職位:" runat="server" CssClass="label">
 60                             </f:ToolbarText>
 61                             <f:ToolbarText ID="txtPositionInfoName" runat="server" CssClass="content">
 62                             </f:ToolbarText>
 63                             <f:ToolbarText Text="在線人數:" runat="server" CssClass="label">
 64                             </f:ToolbarText>
 65                             <f:ToolbarText ID="txtOnlineUserCount" runat="server" CssClass="content">
 66                             </f:ToolbarText>
 67                             <f:ToolbarFill runat="server" />
 68                             <f:Button ID="btnClearCache" runat="server" Icon="controlblank" Text="清除後端緩存" OnClick="btnClearCache_Click"
 69                                 EnablePostBack="false" CssStyle="background-color: transparent;background-image: none !important;border-width: 0 !important;">
 70                             </f:Button>
 71                             <f:Button ID="btnCalendar" runat="server" Icon="Calendar" Text="萬年曆" EnablePostBack="false"
 72                                 CssStyle="background-color: transparent;background-image: none !important;border-width: 0 !important;">
 73                             </f:Button>
 74                             <f:Button ID="btnHelp" EnablePostBack="false" Icon="Help" Text="幫助" runat="server"
 75                                 CssStyle="background-color: transparent;background-image: none !important;border-width: 0 !important;">
 76                             </f:Button>
 77                             <f:Button ID="btnExit" runat="server" Icon="UserRed" Text="安全退出" ConfirmText="肯定退出系統?"
 78                                 OnClick="btnExit_Click" CssStyle="background-color: transparent;background-image: none !important;border-width: 0 !important;">
 79                             </f:Button>
 80                         </Items>
 81                     </f:Toolbar>
 82                 </Toolbars>
 83             </f:Region>
 84             <f:Region ID="Region2" Split="true" Width="200px" ShowHeader="true" Title="菜單" EnableCollapse="true"
 85                 Layout="Fit" Position="Left" runat="server">
 86                 <Items>
 87                     <f:Tree runat="server" ShowBorder="false" ShowHeader="false" EnableArrows="true"
 88                         EnableLines="true" ID="leftMenuTree">
 89                     </f:Tree>
 90                 </Items>
 91             </f:Region>
 92             <f:Region ID="mainRegion" ShowHeader="false" Layout="Fit" Position="Center" runat="server">
 93                 <Items>
 94                     <f:TabStrip ID="mainTabStrip" EnableTabCloseMenu="true" ShowBorder="false" runat="server">
 95                         <Tabs>
 96                             <f:Tab ID="Tab1" Title="首頁" Layout="Fit" Icon="House" runat="server">
 97                                 <Items>
 98                                     <f:ContentPanel ID="ContentPanel2" ShowBorder="false" BodyPadding="10px" ShowHeader="false"
 99                                         AutoScroll="true" runat="server">
100                                         <h2>
101                                             從零開始編寫本身的C#框架</h2>
102                                         本框架由AllEmpty原創併發佈於博客園,採用Apache License v2.0軟件受權許可,歡迎你們試用。你們在使用時,請在軟件源碼中保留本人的相關版權信息,謝謝。
103                                         <br />
104                                         發表本框架源碼,主要是爲了和你們共同窗習共同進步,若是你支持本系列文章的繼續發表或有更好的建議,請對相關文章回復你的見解與點擊推薦,有興趣的朋友還能夠加加Q羣:327360708
105                                         ,你們一塊兒探討。
106                                         <br />
107                                         更多內容,敬請關注博客:<a href="http://www.cnblogs.com/EmptyFS/" target="_blank">http://www.cnblogs.com/EmptyFS/</a>
108                                         <br />
109                                         <br />
110                                         <a href="http://www.cnblogs.com/EmptyFS/tag/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E7%BC%96%E5%86%99%E8%87%AA%E5%B7%B1%E7%9A%84C%23%E6%A1%86%E6%9E%B6/"
111                                             target="_blank">從零開始編寫本身的C#框架章節目錄</a>
112                                         <br />
113                                         <br />
114                                         <br />
115                                         <h2>
116                                             使用技術</h2>
117                                         <br />
118                                         本框架使用ASP.NET(C#)、MsSql、SubSonic3.0、FineUI、Linq、T4模板、IIS緩存等相關技術
119                                         <br />
120                                         <br />
121                                         <a href="https://github.com/subsonic" target="_blank">SubSonic</a>是<span style="font-size: 16px;"><a
122                                             href="http://www.wekeroad.com/" target="_blank">Rob Conery</a><span style="font-size: 16px;">用c#語言寫的</span></span>123                                         個ORM開源框架,使用BSD軟件受權許可(The BSD 3-Clause License)。它是一個實用的快速開發框架,經過很是簡單的配置,以及附帶的T4模板,就能夠幫咱們生成功能強大的數據訪問層工具,讓開發人員遠離SQL語句的拼接,專一於業務邏輯的開發。
124                                         <br />
125                                         <a target="_blank" style="font-weight: bold;" href="http://fineui.com/">FineUI</a>是<a
126                                             href="http://cnblogs.com/sanshi/" target="_blank">三生石上</a> 和 <a href="http://www.codeplex.com/site/users/view/RingoDing"
127                                                 target="_blank">RingoDing</a> 建立並維護。使用Apache License v2.0軟件受權許可(ExtJS 庫在
128                                         <a target="_blank" href="http://www.sencha.com/license">GPL v3</a> 協議下發布)。它基於 jQuery
129                                         / ExtJS 的 ASP.NET 控件庫,建立 No JavaScript,No CSS,No UpdatePanel,No ViewState,No WebServices
130                                         的網站應用程序
131                                         <br />
132                                         <br />
133                                         <h2>
134                                             支持的瀏覽器</h2>
135                                         IE 8.0+、Chrome、Firefox、Opera、Safari
136                                         <br />
137                                         <br />
138                                         <br />
139                                         <br />
140                                         注:本框架不內置 ExtJS 庫,請自行下載ExtJS 庫後手工添加:<a target="_blank" href="http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218">http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218</a>
141                                     </f:ContentPanel>
142                                 </Items>
143                             </f:Tab>
144                         </Tabs>
145                     </f:TabStrip>
146                 </Items>
147             </f:Region>
148         </Regions>
149     </f:RegionPanel>
150     <f:Window ID="Window1" runat="server" IsModal="true" Hidden="true" EnableIFrame="true"
151         EnableResize="true" EnableMaximize="true" IFrameUrl="about:blank" Width="650px"
152         Height="450px">
153     </f:Window>
154     </form>
155     <script>
156         var menuClientID = '<%= leftMenuTree.ClientID %>';
157         var tabStripClientID = '<%= mainTabStrip.ClientID %>';
158 
159         // 頁面控件初始化完畢後,會調用用戶自定義的onReady函數
160         F.ready(function () {
161 
162             // 初始化主框架中的樹(或者Accordion+Tree)和選項卡互動,以及地址欄的更新
163             // treeMenu: 主框架中的樹控件實例,或者內嵌樹控件的手風琴控件實例
164             // mainTabStrip: 選項卡實例
165             // createToolbar: 建立選項卡前的回調函數(接受tabConfig參數)
166             // updateLocationHash: 切換Tab時,是否更新地址欄Hash值
167             // refreshWhenExist: 添加選項卡時,若是選項卡已經存在,是否刷新內部IFrame
168             // refreshWhenTabChange: 切換選項卡時,是否刷新內部IFrame
169             F.util.initTreeTabStrip(F(menuClientID), F(tabStripClientID), null, true, false, false);
170 
171         });
172     </script>
173 </body>
174 </html>
View Code

  Main.aspx.csgithub

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Web;
  5 using DotNet.Utilities;
  6 using FineUI;
  7 using Solution.DataAccess.DataModel;
  8 using Solution.DataAccess.DbHelper;
  9 using Solution.Logic.Managers;
 10 using Solution.Web.Managers.WebManage.Application;
 11 using SubSonic.Query;
 12 
 13 namespace Solution.Web.Managers
 14 {
 15     public partial class Main : PageBase
 16     {
 17         //用戶頁面操做權限
 18         string _pagePower = "";
 19 
 20         #region Page_Load
 21         protected void Page_Load(object sender, EventArgs e)
 22         {
 23             if (!IsPostBack)
 24             {
 25                 //添加萬年曆按鍵事件,在主窗口中添加新選項卡
 26                 btnCalendar.OnClientClick = mainTabStrip.GetAddTabReference("calendar_tab", "/WebManage/Help/wannianli.htm", "萬年曆", IconHelper.GetIconUrl(Icon.Calendar), true);
 27 
 28                 //加載信息
 29                 LoadData();
 30             }
 31         }
 32         #endregion
 33 
 34         #region 接口函數,用於UI頁面初始化,給邏輯層對象、列表等對象賦值
 35         public override void Init()
 36         {
 37 
 38         }
 39         #endregion
 40 
 41         #region 加載數據
 42 
 43         /// <summary>讀取數據</summary>
 44         public override void LoadData()
 45         {
 46             #region 展現用戶信息
 47 
 48             //在線人數
 49             txtOnlineUserCount.Text = OnlineUsersBll.GetInstence().GetUserOnlineCount() + "";
 50 
 51             //當前用戶信息
 52             var userHashKey = OnlineUsersBll.GetInstence().GetUserHashKey();
 53             var model = OnlineUsersBll.GetInstence().GetModelForCache(x => x.UserHashKey == userHashKey);
 54             if (model == null)
 55                 return;
 56 
 57             //用戶名稱
 58             txtUser.Text = model.Manager_CName + " [" + IpHelper.GetUserIp() + "]";
 59 
 60             //部門
 61             txtBranchName.Text = model.Branch_Name;
 62             //職位
 63             txtPositionInfoName.Text = model.Position_Name;
 64             #endregion
 65             
 66             #region 菜單欄數據綁定
 67             //獲取用戶頁面操做權限
 68             _pagePower = OnlineUsersBll.GetInstence().GetPagePower();
 69 
 70 
 71             //建立查詢條件
 72             var wheres = new List<ConditionFun.SqlqueryCondition>();
 73             //條件:只查詢出須要顯示的菜單
 74             wheres.Add(new ConditionFun.SqlqueryCondition(ConstraintType.And, MenuInfoTable.IsDisplay, Comparison.Equals, 1));
 75             //進行查詢,獲取DataTable
 76             var dt = MenuInfoBll.GetInstence().GetDataTable(false, 0, null, 0, 0, wheres);
 77             //綁定樹列表
 78             BandingTree(dt);
 79 
 80             #endregion
 81 
 82             #region 開啓時鐘檢測
 83             Timer1.Enabled = true;
 84             #endregion
 85 
 86         }
 87         #endregion
 88 
 89         #region 頁面按鍵
 90 
 91         #region 清空緩存並從新加載
 92         /// <summary>
 93         /// 清空緩存並從新加載
 94         /// </summary>
 95         /// <param name="sender"></param>
 96         /// <param name="e"></param>
 97         protected void btnClearCache_Click(object sender, EventArgs e)
 98         {
 99             //清空所有後端緩存HttpRuntime.Cache(在線列表緩存除外)
100             CacheHelper.RemoveManagersAllCache();
101         }
102         #endregion
103 
104         #region 退出系統
105         /// <summary>
106         /// 退出系統
107         /// </summary>
108         /// <param name="sender"></param>
109         /// <param name="e"></param>
110         protected void btnExit_Click(object sender, EventArgs e)
111         {
112             LoginLogBll.GetInstence().UserExit();
113 
114             FineUI.Alert.ShowInTop("成功退出系統!", "安全退出", MessageBoxIcon.Information, "top.location='Login.aspx'");
115         }
116         #endregion
117 
118         #endregion
119 
120         #region 定時器
121         /// <summary>
122         /// 定時執行方法
123         /// </summary>
124         /// <param name="sender"></param>
125         /// <param name="e"></param>
126         protected void Timer1_Tick(object sender, EventArgs e)
127         {
128             Timer1.Enabled = false;
129 
130             #region 檢測當前用戶是否退出
131             OnlineUsersBll.GetInstence().IsTimeOut();
132             #endregion
133 
134             #region 檢測用戶登陸的有效性(是否被系統踢下線或管理員踢下線)
135             if (OnlineUsersBll.GetInstence().IsOffline(this))
136                 return;
137             #endregion
138 
139             #region 更新信息(在線人數,未讀取的短消息)
140             if (HttpRuntime.Cache == null)
141             {
142                 txtOnlineUserCount.Text = "--";
143             }
144             else
145             {
146                 //更新當前在線用戶數量
147                 txtOnlineUserCount.Text = OnlineUsersBll.GetInstence().GetUserOnlineCount() + "";
148             }
149             #endregion
150 
151             #region 修改用戶最後在線時間
152 
153             //修改用戶最後在線時間
154             OnlineUsersBll.GetInstence().UpdateTime();
155 
156             #endregion
157 
158             Timer1.Enabled = true;
159         }
160         #endregion
161         
162         #region FineUI控件之--樹控件(Tree)
163 
164         #region 綁定樹控件
165         /// <summary>樹控件(Tree)
166         /// </summary>
167         /// <param name="dataTable">DataTable數據源</param>
168         /// <returns>樹控件(Tree)</returns>
169         public void BandingTree(DataTable dataTable)
170         {
171             try
172             {
173                 //檢查指定的列是否在數據源中可否找到
174                 if (dataTable.Rows.Count == 0)
175                 {
176                     return;
177                 }
178                 //篩選出所有一級節點
179                 DataTable dtRoot = DataTableHelper.GetFilterData(dataTable, MenuInfoTable.ParentId, "0", MenuInfoTable.Sort, "Asc");
180                 //判斷是否有節點存在
181                 if (dtRoot.Rows.Count != 0)
182                 {
183                     //循環讀取節點
184                     foreach (DataRow dr in dtRoot.Rows)
185                     {
186                         //判斷當前節點是否有權限訪問,沒有則跳過本次循環
187                         //暫時先註釋掉權限判斷,等添加相關權限後再開啓
188                         //if (_pagePower.IndexOf("," + dr[MenuInfoTable.Id].ToString() + ",") < 0)
189                         //{
190                         //    continue;
191                         //}
192 
193                         //建立樹節點
194                         var treenode = new FineUI.TreeNode();
195                         //設置節點ID
196                         treenode.NodeID = dr[MenuInfoTable.Id].ToString();
197                         //設置節點名稱
198                         treenode.Text = dr[MenuInfoTable.Name].ToString();
199                         treenode.Target = "mainRegion";
200                         //判斷當前節點是否爲最終節點
201                         if (int.Parse(dr[MenuInfoTable.IsMenu].ToString()) != 0)
202                         {
203                             //設置節點連接地址,並在Url後面添加頁面加密參數
204                             treenode.NavigateUrl = dr[MenuInfoTable.Url].ToString() + "?" + MenuInfoBll.GetInstence().PageUrlEncryptString();
205                             treenode.Leaf = true;
206                         }
207                         else
208                         {
209                             treenode.NavigateUrl = "";
210                             treenode.Leaf = false;
211                             //設置樹節點收縮起來
212                             treenode.Expanded = false;
213                         }
214 
215                         //添加子節點
216                         AddChildrenNode(dataTable, treenode, dr[MenuInfoTable.Id].ToString());
217                         //將節點加入樹列表中
218                         leftMenuTree.Nodes.Add(treenode);
219                     }
220                 }
221             }
222             catch (Exception ex)
223             {
224                 CommonBll.WriteLog("", ex);
225             }
226         }
227         #endregion
228 
229         #region 添加子節點
230         /// <summary>
231         /// 添加子節點
232         /// </summary>
233         /// <param name="dt">數據表</param>
234         /// <param name="treenode">當前樹節點</param>
235         /// <param name="parentID">父節點ID值</param>
236         private void AddChildrenNode(DataTable dt, FineUI.TreeNode treenode, string parentID)
237         {
238             //篩選出當前節點下面的子節點
239             DataTable Childdt = DataTableHelper.GetFilterData(dt, MenuInfoTable.ParentId, parentID, MenuInfoTable.Sort, "Asc");
240             //判斷是否有節點存在
241             if (Childdt.Rows.Count > 0)
242             {
243                 //循環讀取節點
244                 foreach (DataRow dr in Childdt.Rows)
245                 {
246                     //判斷當前節點是否有權限訪問,沒有則跳過本次循環
247                     //if (_pagePower.IndexOf("," + dr[MenuInfoTable.Id].ToString() + ",") < 0)
248                     //{
249                     //    continue;
250                     //}
251 
252                     //建立子節點
253                     var TreeChildNode = new FineUI.TreeNode();
254                     //設置節點ID
255                     TreeChildNode.NodeID = dr[MenuInfoTable.Id].ToString();
256                     //設置節點名稱
257                     TreeChildNode.Text = dr[MenuInfoTable.Name].ToString();
258                     TreeChildNode.Target = "mainRegion";
259                     //判斷當前節點是否爲最終節點
260                     if (int.Parse(dr[MenuInfoTable.IsMenu].ToString()) != 0)
261                     {
262                         //設置節點連接地址
263                         if (dr[MenuInfoTable.Url].ToString().IndexOf("?") > 0)
264                         {
265                             TreeChildNode.NavigateUrl = dr[MenuInfoTable.Url].ToString() + "&" + MenuInfoBll.GetInstence().PageUrlEncryptString();
266                         }
267                         else
268                         {
269                             TreeChildNode.NavigateUrl = dr[MenuInfoTable.Url].ToString() + "?" + MenuInfoBll.GetInstence().PageUrlEncryptString();
270                         }
271                         //TreeChildNode.NavigateUrl = dr[MenuInfoTable.Url].ToString() + "?" + MenuInfoBll.PageURLEncryptString();
272                         TreeChildNode.Leaf = true;
273                     }
274                     else
275                     {
276                         TreeChildNode.NavigateUrl = "";
277                         TreeChildNode.Leaf = false;
278                         //設置樹節點擴張
279                         TreeChildNode.Expanded = true;
280                     }
281                     //將節點添加進樹列表中
282                     treenode.Nodes.Add(TreeChildNode);
283 
284                     //遞歸添加子節點
285                     AddChildrenNode(dt, TreeChildNode, dr[MenuInfoTable.Id].ToString());
286 
287                 }
288 
289             }
290 
291         }
292 
293         #endregion
294 
295         #endregion
296 
297     }
298 }
View Code

 

  一、Main.aspx頁面說明數據庫

  Main.aspx頁面主要使用的是FineUI發佈的空項目改造而來的,在這個基礎上,頂部添加了當前用戶的相關信息、在線人數,以及清除緩存、萬年曆和退出等按鍵。c#

  添加了<f:Timer ID="Timer1" Interval="60" Enabled="false" OnTick="Timer1_Tick" runat="server">定時器功能,它每60秒會運行一次,執行Timer1_Tick函數,檢查當前用戶是否已退出,檢查當前用戶賬號是否已在其餘電腦或瀏覽器上登錄或給管理員踢出系統,更新頂部當前在線人數,更新用戶最後在線時間(用於檢查用戶是否超時離線退出)後端

 1      #region 定時器
 2         /// <summary>
 3         /// 定時執行方法
 4         /// </summary>
 5         /// <param name="sender"></param>
 6         /// <param name="e"></param>
 7         protected void Timer1_Tick(object sender, EventArgs e)
 8         {
 9             Timer1.Enabled = false;
10 
11             #region 檢測當前用戶是否退出
12             OnlineUsersBll.GetInstence().IsTimeOut();
13             #endregion
14 
15             #region 檢測用戶登陸的有效性(是否被系統踢下線或管理員踢下線)
16             if (OnlineUsersBll.GetInstence().IsOffline(this))
17                 return;
18             #endregion
19 
20             #region 更新信息(在線人數,未讀取的短消息)
21             if (HttpRuntime.Cache == null)
22             {
23                 txtOnlineUserCount.Text = "--";
24             }
25             else
26             {
27                 //更新當前在線用戶數量
28                 txtOnlineUserCount.Text = OnlineUsersBll.GetInstence().GetUserOnlineCount() + "";
29             }
30             #endregion
31 
32             #region 修改用戶最後在線時間
33 
34             //修改用戶最後在線時間
35             OnlineUsersBll.GetInstence().UpdateTime();
36 
37             #endregion
38 
39             Timer1.Enabled = true;
40         }
41         #endregion

 

  二、Main.aspx.cs文件父類瀏覽器

  它繼承PageBase類,頁面在加載的時間,就會自動調用父類的OnInit初始化函數,運行裏面的程序,來檢查當前用戶是否退出,是否有當前頁面的操做權限,設置放置在頁面控件Id爲toolBar中的各個按鍵是否有權限使用。並記錄用戶當前所在位置。

 

  三、添加頁面按鍵事件

  對於FineUI的頁面按鍵事件,共一兩種,一種是服務器端事件OnClick,一種是客戶端事件OnClientClick。

  添加了服務器端事件OnClick事件後,必須在cs文件中添加對應的事件函數,好比清空緩存按鍵(btnClearCache_Click)與安全退出按鍵(btnExit_Click)

 1      #region 頁面按鍵
 2 
 3         #region 清空緩存並從新加載
 4         /// <summary>
 5         /// 清空緩存並從新加載
 6         /// </summary>
 7         /// <param name="sender"></param>
 8         /// <param name="e"></param>
 9         protected void btnClearCache_Click(object sender, EventArgs e)
10         {
11             //清空所有後端緩存HttpRuntime.Cache(在線列表緩存除外)
12             CacheHelper.RemoveManagersAllCache();
13         }
14         #endregion
15 
16         #region 退出系統
17         /// <summary>
18         /// 退出系統
19         /// </summary>
20         /// <param name="sender"></param>
21         /// <param name="e"></param>
22         protected void btnExit_Click(object sender, EventArgs e)
23         {
24             LoginLogBll.GetInstence().UserExit();
25 
26             FineUI.Alert.ShowInTop("成功退出系統!", "安全退出", MessageBoxIcon.Information, "top.location='Login.aspx'");
27         }
28         #endregion

  清空緩存按鍵主要功能:清除當前IIS應用程序池中除在線緩存之外的全部HttpRuntime.Cache緩存

  安全退出按鍵主要功能:刪除當前登錄用戶的全部緩存、Session與Cookies記錄,並添加用戶退出日誌。

  點擊退出後日志記錄信息(LoginLog表):

  

 

  而客戶端事件OnClientClick,只須要在頁面中添加JS代碼,它就會直接執行對應的JS函數,不與服務器端進行直接交互。

 

  當前除了以上添加按鍵事件外,還能夠直接在代碼中綁定控件事件方法(添加新選項卡還有其餘一些方法,不過以這一種最爲方便)

 1         #region Page_Load
 2         protected void Page_Load(object sender, EventArgs e)
 3         {
 4             if (!IsPostBack)
 5             {
 6                 //添加萬年曆按鍵事件,在主窗口中添加新選項卡
 7                 btnCalendar.OnClientClick = mainTabStrip.GetAddTabReference("calendar_tab", "/WebManage/Help/wannianli.htm", "萬年曆", IconHelper.GetIconUrl(Icon.Calendar), true);
 8 
 9                 //加載信息
10                 LoadData();
11             }
12         }
13         #endregion    

  以上代碼主要是爲萬年曆按鍵添加一個事件,點擊按鍵後,在首頁標籤旁邊新增一個選項卡,打開萬年曆頁面。這些FineUI的範例官網上有,你們自行學習就能夠了。

  

 

  四、展現用戶信息

  這個比較簡單,在LoadData函數中,直接從在線緩存中讀取當前用戶實體後,爲頁面頂部控件賦值就能夠了。

  在這裏簡單的講講LoadData函數,這是父類的抽像函數(由於每一個子類都必須將它實現,因此將它從虛函數改成抽像函數),在每一個子類中都必需要重寫它,它的主要功能是加載數據,列表頁面主要加載的是列表中須要顯示的記錄,而編輯頁面加載的是各個頁面的實體,將它們與頁面控件進行綁定並顯示出來。實現了該函數後,它將會被父類中的其餘各類函數引用,好比刷新、查詢、翻頁、保存排序、自動排序、刪除、關閉子窗口......等函數執行完後會調用它來從新加載數據,刷新頁面顯示內容,具體你們能夠查看PageBase.cs類,看看有那些函數引用了LoadData函數就知道了。

 

  五、綁定菜單欄樹列表

  首先將全部能夠顯示的菜單所有讀取出來

  下面是LoadData函數中的一段代碼

 1             #region 菜單欄數據綁定
 2             //獲取用戶頁面操做權限
 3             _pagePower = OnlineUsersBll.GetInstence().GetPagePower();
 4 
 5 
 6             //建立查詢條件
 7             var wheres = new List<ConditionFun.SqlqueryCondition>();
 8             //條件:只查詢出須要顯示的菜單
 9             wheres.Add(new ConditionFun.SqlqueryCondition(ConstraintType.And, MenuInfoTable.IsDisplay, Comparison.Equals, 1));
10             //進行查詢,獲取DataTable
11             var dt = MenuInfoBll.GetInstence().GetDataTable(false, 0, null, 0, 0, wheres);
12             //綁定樹列表
13             BandingTree(dt);
14 
15             #endregion

  ConditionFun.SqlqueryCondition是封裝好的查詢條件類。

  第一個參數爲查詢表達式,即當前條件與前一條件使用的表達式是And仍是Or;

  第二個參數是想要查詢的列表名稱,這裏咱們使用的是表名+Table.列名的方式調用,這樣操做的話可使咱們的代碼去除硬編碼,好處是當咱們萬一修改了數據庫字段名稱後,從新生成相關的模板並按F6從新編譯代碼時,就會直接報出全部未同步修改的代碼錯誤位置出來,讓咱們能快速定位並修改掉它,而硬編碼(指的是直接使用相似"IsDisplay"這種字段書寫格式的代碼)則不會報錯,代碼量多時咱們將很難找出問題,直接程序執行到對應位置時纔會拋出異常。

  第三個參數是條件值表達式,表示當前列與值的關係,好比:等於、大於、小於、in、not in、like......等;

  第四個參數是條件值

  在這裏要同你們說明的是,SubSonic3.0對於括號支持的不是不少,只支持單層括號,嵌套括號時將會出錯,爲了不這種問題,建議多括號作爲條件值查詢時,請使用Linq表達式來查詢(Lambd表達式),或者存儲過程。具體加括號後的使用方法在後面章節會詳細的進行說明。

  MenuInfoBll.GetInstence().GetDataTable()函數是咱們邏輯層生成好的模板函數,咱們直接調用就能夠了。(咱們後端開發對於數據的增、刪、查、改等操做函數幾乎都已經生成好了,直接調用就能夠)

  經過執行BandingTree函數與AddChildrenNode函數,將菜單樹列表建立後綁定<f:Tree runat="server" ShowBorder="false" ShowHeader="false" EnableArrows="true" EnableLines="true" ID="leftMenuTree"></f:Tree>控件

  下面經過向MenuInfo表添加一些菜單記錄來演示咱們首頁中的樹列表顯示效果

 1 TRUNCATE TABLE MenuInfo
 2 GO
 3 
 4 set IDENTITY_INSERT  MenuInfo   on 
 5 GO
 6 
 7 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (1, '系統管理', '/WebManage/Systems/SysAuthority/', 0, 6, 0, 1, 0)
 8 GO
 9 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (2, '基本設置', '/WebManage/Systems/SysSet/', 1, 1, 1, 1, 0)
10 GO
11 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (3, '權限管理', '/WebManage/Systems/SysAuthority/', 1, 2, 1, 1, 0)
12 GO
13 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (5, '安全管理', '/WebManage/Systems/SysSecurity/', 1, 3, 1, 1, 0)
14 GO
15 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (6, '網站參數設置', '/WebManage/Systems/SysSet/WebConfigSet.aspx', 2, 1, 2, 1, 1)
16 GO
17 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (11, '菜單管理', '/WebManage/Systems/SysAuthority/MenuPage.aspx', 3, 1, 2, 1, 1)
18 GO
19 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (12, '菜單編輯', '/WebManage/Systems/SysAuthority/MenuPageEdit.aspx', 3, 2, 2, 0, 1)
20 GO
21 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (13, '頁面權限設置', '/WebManage/Systems/SysAuthority/PagePowerSignList.aspx', 3, 3, 2, 1, 1)
22 GO
23 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (14, '部門管理', '/WebManage/Systems/SysAuthority/BranchList.aspx', 3, 7, 2, 1, 1)
24 GO
25 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (15, '部門編輯', '/WebManage/Systems/SysAuthority/BranchEdit.aspx', 3, 8, 2, 0, 1)
26 GO
27 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (16, '職位管理', '/WebManage/Systems/SysAuthority/PositionList.aspx', 3, 9, 2, 1, 1)
28 GO
29 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (17, '職位編輯', '/WebManage/Systems/SysAuthority/PositionEdit.aspx', 3, 10, 2, 0, 1)
30 GO
31 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (18, '管理員管理', '/WebManage/Systems/SysAuthority/ManagerList.aspx', 3, 12, 2, 1, 1)
32 GO
33 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (19, '管理員編輯', '/WebManage/Systems/SysAuthority/ManagerEdit.aspx', 3, 13, 2, 0, 1)
34 GO
35 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (20, '職位權限樹狀圖', '/WebManage/Systems/SysAuthority/MenuPageTree.aspx', 3, 11, 2, 0, 1)
36 GO
37 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (21, '登錄日誌', '/WebManage/Systems/SysSecurity/LoginLogList.aspx', 5, 1, 2, 1, 1)
38 GO
39 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (22, '操做日誌', '/WebManage/Systems/SysSecurity/UseLogList.aspx', 5, 2, 2, 1, 1)
40 GO
41 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (23, '在線用戶', '/WebManage/Systems/SysSecurity/OnlineUsers.aspx', 5, 3, 2, 1, 1)
42 GO
43 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (36, '信息發佈', '/WebManage/Information/', 0, 1, 0, 1, 0)
44 GO
45 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (37, '文章管理', '/WebManage/Information/Info/', 36, 1, 1, 1, 0)
46 GO
47 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (38, '文章欄目管理', '/WebManage/Information/Info/InfoClassList.aspx', 37, 1, 2, 1, 1)
48 GO
49 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (39, '文章欄目編輯', '/WebManage/Information/Info/InfoClassAdd.aspx', 37, 2, 2, 0, 1)
50 GO
51 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (40, '文章內容管理', '/WebManage/Information/Info/InfoList.aspx', 37, 3, 2, 1, 1)
52 GO
53 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (41, '文章內容編輯', '/WebManage/Information/Info/InfoAdd.aspx', 37, 4, 2, 0, 1)
54 GO
55 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (127, '頁面權限編輯', '/WebManage/Systems/SysAuthority/PagePowerSignEdit.aspx', 3, 4, 2, 0, 1)
56 GO
57 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (129, '公共頁面權限設置', '/WebManage/Systems/SysAuthority/PagePowerSignPublicList.aspx', 3, 5, 2, 1, 1)
58 GO
59 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (130, '公共頁面權限編輯', '/WebManage/Systems/SysAuthority/PagePowerSignPublicEdit.aspx', 3, 6, 2, 0, 1)
60 GO
61 INSERT INTO MenuInfo (Id, Name, Url, ParentId, Sort, Depth, IsDisplay, IsMenu) VALUES (203, '錯誤日誌', '/WebManage/Systems/SysSecurity/ErrorLog.aspx', 5, 4, 2, 1, 1)
62 GO
63 
64 set IDENTITY_INSERT   MenuInfo   off 
View Code

 

  六、小結

  登錄頁、父類與後端首頁,是本系統三個最基本的組成零部件,完成了這三個部件後,接下來就是體驗如何來進行快速開發的成果了。後面章節發表的內容,主要是針對框架中已生成函數或一些特殊功能(函數)的調用方法講解,用實例來說述這些功能的使用方法。

 

 

  點擊下載:

本框架不內置 ExtJS 庫,請自行下載ExtJS 庫後手工添加到Solution.Web.Managers項目的根目錄中(以下圖):http://fineui.com/bbs/forum.php?mod=viewthread&tid=3218

 

 

Web層後端首頁.rar

 

 

 版權聲明:

  本文由AllEmpty原創併發佈於博客園,歡迎轉載,未經本人贊成必須保留此段聲明,且在文章頁面明顯位置給出原文連接,不然保留追究法律責任的權利。若有問題,能夠經過1654937@qq.com 聯繫我,很是感謝。

 

  發表本編內容,只要主爲了和你們共同窗習共同進步,有興趣的朋友能夠加加Q羣:327360708 ,你們一塊兒探討。

 

  更多內容,敬請觀注博客:http://www.cnblogs.com/EmptyFS/

相關文章
相關標籤/搜索