从零开始编写自己的C#框架(18)——Web层后端权限模块——菜单管理

2020-12-13 16:23

阅读:595

YPE html>

标签:style   class   blog   code   http   tar   

  从本章开始,主要讲解的是页面中对框架相关功能的调用方法,比如列表页面(又分为有层次感列表和普通列表)、编辑页面、多标签页面等,只要熟悉了这些函数的使用方法,那么开发起来就会很便捷了。

 

  1、如图先创建菜单列表与编辑页面

   soscw.com,搜素材

   MenuInfoList.aspx

soscw.com,搜素材soscw.com,搜素材
 1 "C#" AutoEventWireup="true" CodeBehind="MenuInfoList.aspx.cs" Inherits="Solution.Web.Managers.WebManage.Systems.Powers.MenuInfoList" %>
 2 
 3 span>"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 "http://www.w3.org/1999/xhtml">
 5"Head1" runat="server">
 6     菜单(页面)列表 7 
 8 
 9     
"form1" runat="server"> 10 "PageManager1" runat="server" /> 11 "Panel1" runat="server" title="菜单(页面)列表" enableframe="false" bodypadding="10px" 12 enablecollapse="True"> 13 14 "toolBar" runat="server"> 15 16 17 18 19 "ButtonEdit" runat="server" Text="编辑" Icon="BulletEdit" OnClick="ButtonEdit_Click" 20 OnClientClick="if(!F(‘Panel1_Grid1‘).getSelectionModel().hasSelection()|| F(‘Panel1_Grid1‘).getSelectionModel().getCount()>=2){F.alert(‘您没有选择编辑项或只能选择一项进行编辑!‘); return false; }"> 21 --%> 22 23 24 27 28 29 30 31 "SimpleForm1" BodyPadding="5px" runat="server" EnableFrame="false" EnableCollapse="true" 32 ShowBorder="True" ShowHeader="False"> 33 34 "菜单选择" runat="server" ID="ddlParentId" Width="250px">35 36 37 "Grid1" Title="菜单列表" EnableFrame="false" EnableCollapse="true" AllowSorting="true" SortField="Depth" SortDirection="ASC" 38 PageSize="15" ShowBorder="true" ShowHeader="true" AllowPaging="true" runat="server" EnableCheckBoxSelect="True" DataKeyNames="Id" EnableColumnLines="true" 39 OnPageIndexChange="Grid1_PageIndexChange" OnPreRowDataBound="Grid1_PreRowDataBound" OnRowCommand="Grid1_RowCommand"> 40 41 42 "180px" DataField="Name" DataFormatString="{0}" DataSimulateTreeLevelField="Depth" HeaderText="菜单(页面)名" /> 43 "Url" HeaderText="访问路径" ExpandUnusedSpace="true" /> 44 "排序" Width="100px"> 45 46 "tbSort" runat="server" Width="50px" Text= AutoPostBack="false"> 47 48 49 "是否显示" Icon="BulletCross" TextAlign="Center" ToolTip="点击修改是否显示" ColumnID="IsDisplay" CommandName="IsDisplay" /> 50 "是否页面" Icon="BulletCross" TextAlign="Center" ToolTip="点击修改是否页面" ColumnID="IsMenu" CommandName="IsMenu" /> 51 "Depth" HeaderText="级别层次" TextAlign="Center" /> 52 "操作" TextAlign="Center" ToolTip="点击修改当前记录" ColumnID="ButtonEdit" CommandName="ButtonEdit" /> 53 54 55 56 "server" ID="SortColumn" Text="Id">57 58 59 "Window1" width="480px" height="340px" icon="TagBlue" title="编辑" hidden="True" 60 enablemaximize="True" closeaction="HidePostBack" onclose="Window1_Close" enablecollapse="true" 61 runat="server" enableresize="true" bodypadding="5px" enableframe="True" iframeurl="about:blank" 62 enableiframe="true" enableclose="true" plain="false" ismodal="True" enableconfirmonclose="True"> 63 64
65 66
View Code

  MenuInfoList.aspx.cs

soscw.com,搜素材soscw.com,搜素材
  1 using System;
  2 using System.Collections.Generic;
  3 using DotNet.Utilities;
  4 using FineUI;
  5 using Solution.DataAccess.DataModel;
  6 using Solution.Logic.Managers;
  7 using Solution.Web.Managers.WebManage.Application;
  8 
  9 namespace Solution.Web.Managers.WebManage.Systems.Powers
 10 {
 11     public partial class MenuInfoList : PageBase
 12     {
 13         #region Page_Load
 14         protected void Page_Load(object sender, EventArgs e)
 15         {
 16             if (!IsPostBack)
 17             {
 18                 //绑定下拉列表
 19                 MenuInfoBll.GetInstence().BandDropDownList(this, ddlParentId);
 20 
 21                 LoadData();
 22             }
 23         }
 24         #endregion
 25 
 26         #region 接口函数,用于UI页面初始化,给逻辑层对象、列表等对象赋值
 27         public override void Init()
 28         {
 29             //逻辑对象赋值
 30             bll = MenuInfoBll.GetInstence();
 31             //表格对象赋值
 32             grid = Grid1;
 33         }
 34         #endregion
 35 
 36         #region 加载数据
 37         /// 读取数据
 38         public override void LoadData()
 39         {
 40             //设置排序
 41             if (sortList == null)
 42             {
 43                 Sort();
 44             }
 45 
 46             //绑定Grid表格
 47             bll.BindGrid(Grid1, InquiryCondition(), sortList);
 48         }
 49 
 50         /// 
 51         /// 查询条件
 52         /// 
 53         /// 
 54         private int InquiryCondition()
 55         {
 56             int value = 0;
 57 
 58             //选择菜单
 59             if (ddlParentId.SelectedValue != "0")
 60             {
 61                 value = ConvertHelper.Cint0(ddlParentId.SelectedValue);
 62             }
 63             return value;
 64         }
 65 
 66         #region 排序
 67         /// 
 68         /// 页面表格绑定排序
 69         /// 
 70         public void Sort()
 71         {
 72             //设置排序
 73             sortList = new Liststring>();
 74             sortList.Add(MenuInfoTable.Depth + " asc");
 75             sortList.Add(MenuInfoTable.Sort + " asc");
 76         }
 77         #endregion
 78 
 79         #endregion
 80         
 81         #region 列表属性绑定
 82 
 83         #region 列表按键绑定——修改列表控件属性
 84         /// 
 85         /// 列表按键绑定——修改列表控件属性
 86         /// 
 87         /// 
 88         /// 
 89         protected void Grid1_PreRowDataBound(object sender, FineUI.GridPreRowEventArgs e)
 90         {
 91             //绑定是否显示状态列
 92             GridRow gr = Grid1.Rows[e.RowIndex];
 93             if (((System.Data.DataRowView)(gr.DataItem)).Row.Table.Rows[e.RowIndex][MenuInfoTable.IsDisplay].ToString() == "0")
 94             {
 95                 var lbf = Grid1.FindColumn("IsDisplay") as LinkButtonField;
 96                 lbf.Icon = Icon.BulletCross;
 97                 lbf.CommandArgument = "1";
 98             }
 99             else
100             {
101                 var lbf = Grid1.FindColumn("IsDisplay") as LinkButtonField;
102                 lbf.Icon = Icon.BulletTick;
103                 lbf.CommandArgument = "0";
104             }
105 
106             //绑定是否菜单列
107             if (((System.Data.DataRowView)(gr.DataItem)).Row.Table.Rows[e.RowIndex][MenuInfoTable.IsMenu].ToString() == "0")
108             {
109                 var lbf = Grid1.FindColumn("IsMenu") as LinkButtonField;
110                 lbf.Icon = Icon.BulletCross;
111                 lbf.CommandArgument = "1";
112             }
113             else
114             {
115                 var lbf = Grid1.FindColumn("IsMenu") as LinkButtonField;
116                 lbf.Icon = Icon.BulletTick;
117                 lbf.CommandArgument = "0";
118             }
119 
120             //绑定是否编辑列
121             var lbfEdit = Grid1.FindColumn("ButtonEdit") as LinkButtonField;
122             lbfEdit.Text = "编辑";
123             //lbfEdit.Enabled = MenuInfoBll.GetInstence().CheckControlPower(this, "ButtonEdit");
124         }
125         #endregion
126 
127         #region Grid点击事件
128         ///  
129         /// Grid点击事件
130         /// 
131         /// 
132         /// 
133         protected void Grid1_RowCommand(object sender, FineUI.GridCommandEventArgs e)
134         {
135             GridRow gr = Grid1.Rows[e.RowIndex];
136             //获取主键ID
137             object id = gr.DataKeys[0];
138 
139             switch (e.CommandName)
140             {
141                 case "IsDisplay":
142                     //更新状态
143                     MenuInfoBll.GetInstence().UpdateIsDisplay(this, ConvertHelper.Cint0(id), ConvertHelper.Cint0(e.CommandArgument));
144                     //重新加载
145                     LoadData();
146 
147                     break;
148                 case "IsMenu":
149                     //更新状态
150                     MenuInfoBll.GetInstence().UpdateIsMenu(this, ConvertHelper.Cint0(id), ConvertHelper.Cint0(e.CommandArgument));
151                     //重新加载
152                     LoadData();
153 
154                     break;
155                 case "ButtonEdit":
156                     Window1.IFrameUrl = "MenuInfoEdit.aspx?Id=" + id + "&" + MenuInfoBll.GetInstence().PageUrlEncryptStringNoKey(id + "");
157                     Window1.Hidden = false;
158 
159                     break;
160             }
161         }
162         #endregion
163 
164         #endregion
165 
166         #region 添加新记录
167         /// 
168         /// 添加新记录
169         /// 
170         public override void Add()
171         {
172             Window1.IFrameUrl = "MenuInfoEdit.aspx?" + MenuInfoBll.GetInstence().PageUrlEncryptString();
173             Window1.Hidden = false;
174         }
175         #endregion
176 
177         #region 编辑记录
178         /// 
179         /// 编辑记录
180         /// 
181         public override void Edit()
182         {
183             string id = GridViewHelper.GetSelectedKey(Grid1, true);
184 
185             Window1.IFrameUrl = "MenuInfoEdit.aspx?Id=" + id + "&" + MenuInfoBll.GetInstence().PageUrlEncryptStringNoKey(id);
186             Window1.Hidden = false;
187         }
188         #endregion
189 
190         #region 删除记录
191         /// 
192         /// 删除记录
193         /// 
194         /// 
195         public override string Delete()
196         {
197             //获取要删除的ID
198             int id = ConvertHelper.Cint0(GridViewHelper.GetSelectedKey(Grid1, true));
199             
200             //如果没有选择记录,则直接退出
201             if (id == 0)
202             {
203                 return "请选择要删除的记录。";
204             }
205 
206             try
207             {
208                 //删除前判断一下
209                 if (MenuInfoBll.GetInstence().Exist(x => x.ParentId == id))
210                 {
211                     return "删除失败,本菜单下面存在子菜单,不能直接删除!";
212                 }
213                 //删除前判断一下
214                 if (PagePowerSignBll.GetInstence().Exist(x => x.MenuInfo_Id == id))
215                 {
216                     return "删除失败,本菜单已绑定有页面控件权限标志,不能直接删除!";
217                 }
218 
219                 //删除记录
220                 bll.Delete(this, id);
221 
222                 return "删除编号ID为[" + id + "]的数据记录成功。";
223             }
224             catch (Exception e)
225             {
226                 string result = "尝试删除编号ID为[" + id + "]的数据记录失败!";
227 
228                 //出现异常,保存出错日志信息
229                 CommonBll.WriteLog(result, e);
230 
231                 return result;
232             }
233         }
234         #endregion
235 
236     }
237 }
View Code

 

  先上列表页面运行效果图

  soscw.com,搜素材

  2、列表页代码说明

  在页面中,可以看到soscw.com,搜素材这条工具条,我们打开aspx页面,找到标签

 1         "toolBar" runat="server">
 2                  3                     
 4                     
 5                     
 6                     "ButtonEdit" runat="server" Text="编辑" Icon="BulletEdit" OnClick="ButtonEdit_Click"
 7                         OnClientClick="if(!F(‘Panel1_Grid1‘).getSelectionModel().hasSelection()|| F(‘Panel1_Grid1‘).getSelectionModel().getCount()>=2){F.alert(‘您没有选择编辑项或只能选择一项进行编辑!‘); return false; }">
 8                    --%> 
 9                     
10                     
11                     
14                 15             

  在里面放置的按键都会在这里显示出来,这个标签的Id必须命名为toolBar,因为在PageBase这个父类的初始化函数OnInit中有下面这段代码,会自动为放在这里的按键进行权限判断处理,检查当前用户是否有对应按键的操作权限,没有操作权限的按键自动禁用掉,这样的话我们在开发时就不用为这些按键权限一个个进行赋值,做这么多麻烦的操作了

soscw.com,搜素材(灰白色的为已禁用按键)&


评论


亲,登录后才可以留言!