兰萍
摘 要: 通过树型菜单,用户可以对资源的结构、类型有直观的了解,但目前很多B/S系统的菜单还是通过代码生成的。为此,基于.NET技术,通过开源项目PetaPoco实现代码,设计并实现了动态导航菜单系统;介绍了数据库设计、算法思想。该技术避免了静态目录树下因数据源经常性改变而频繁修改程序代码的弊端,导航菜单通过数据库进行控制,提高了系统的安全性,使管理变得更加灵活、高效。
关键词: 动态导航菜单; PetaPoco; 数据库设计; 算法
中图分类号:TP301 文献标志码:A 文章编号:1006-8228(2015)02-42-03
Design and implementation of dynamic navigation menu based on .NET
Lan Ping
(Computer department, Shanghai information technology college, Shanghai 200331)
Abstract: Through the menu tree, the user can understand structure and types of the resources. Although many current B/S system menus are generated by code. A dynamic navigation menu based on ASP.NET is introduced. The code is mainly realized through the open source project PetaPoco. The database design and algorithm are introduced. The techniques have avoided the complex modification program code resulting from the change of data source under static catalog tree. The navigation menu is controlled by database which improves security and makes the management more flexible and efficient.
Key words: dynamic navigation menu; PetaPoco; database design; algorithm
0 引言
树型菜单使用比较广泛,比如我们熟悉的资源管理器就是典型的树型菜单。它在页面当中可以起到导航器的作用。通过树型菜单,用户可以对资源的结构、类型有一个直观的了解[1]。网站的开发技术多种多样的,比如ASP.NET、JSP、PHP等,但无论采用何种技术,一般而言导航菜单都是网页中必不可少的一部分。导航菜单通常是将相应的代码写入页面中的某一个区域中来实现,但是这样的网站缺乏可维护性[2]。为了解决这个问题,本文介绍了基于ASP.NET技术的动态导航菜单的设计与实现方法。
1 通过Nuget添加petaPoco的引用
1.1 PetaPoco的介绍及添加
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。Nuget是ASP.NET Gallery的一员。NuGet是免费、开源的包管理开发工具,专注于在.NET应用开发过程中,简单地合并第三方的组件库[3]。
PetaPoco是一款适用于.Net和Mono的微小、快速、单文件的微型对象关系映射器(ORM, Object Relational Mapper)。与那些功能完备的ORM(如NHibernate或Entity Framework)不同的是,PetaPoco更注重易用性和性能,而非丰富的功能。使用PetaPoco只需要引入一个C#文件,就可以使用强类型的 POCO(Plain Old CLR Object),并支持使用T4模板生成的类等等。
PetaPoco最让人感兴趣的功能包括:
⑴ 可与SQL Server、SQL Server CE、MySQL、PostgreSQL以及Oracle数据库协同工作;
⑵ 包含针对Insert/Delete/Update/Save以及IsNew的多个辅助方法;
⑶ 支持简单事务;
⑷ 对于翻页请求会自动计算总记录数,并获取特定分页;
⑸ 支持参数替换,能够从对象属性中抓取命名参数(named parameters);
⑹ 包括一个消耗资源很少的SQL Builder类;
⑺ 部分记录更新;
⑻ 包括T4 Templates,可以用于基于数据库结构生成POCO类。
由于PetaPoco是开源项目,因此添加条件来处理如空间数据等特定情况会很容易。
某项目采用微软的Visual Studio 2012开发平台,为上海一家园林公司开发,新建项目(不是新建网站)-->asp.net web窗体应用程序,自动添加很多包。
在项目名上单击右键,在弹出式菜单中单击“管理nuget程序包”,添加“petapoco-a tiny ormish thing for your pocos”包。
1.2 web.config的配置
在web.config文件中加入
database=XingLu_IMS;"providerName="System.Data.SqlClient"/>
1.3 DataBase.tt的参数设置
打开DataBase.tt,修改ConnectionStringName,以及Namespace和RepoName。
ConnectionStringName="DefaultConnection";
Namespace="YC.PetaPoco";
RepoName="DBUtils";
保存之后VS会自动执行模板文件,并生成实体类文件: Database.cs。如果没有生成成功,把VS关闭重新打开即可。
2 数据库设计
DBMS采用微软的SQL Server 2012,表名为Qs_Xl_modules,Qs_Xl_modules数据库表的设计[4]如表1所示。
3 算法思想
⑴ 执行SQL查询语句返回Parentid字段为0(为0表示菜单项是一级导航菜单)的数据集,并按Displayorder字段升序排列;
⑵ 利用for语句循环添加Parentid字段为0的菜单项,每一项为表格
"img/caidan_2.jpg" id="menu" runat="server"> |
部分核心动态代码[6]:
……
using YC.PetaPoco; //导入该命名空间
……
public void Show(string str)
{ List
* from Qs_Xl_modules where Parentid=0 and ShowState=1 and Class='"+ str+"' order by Displayorder");
string content="
; | ; |
; | "+module.Modulename+" |
+(i==0 ? "":" style=\"display:none;\"")+">
href=\""+list1[j].Linkurl+"\" class=\"menu-two2\">
; ;
16\" height=\"15\" />"+list1[j].Modulename+"