首先说明,本文为照顾刚入门的新手,有些地方可能会稍微说点基础的东西,高手可以直接忽略。
成都网站设计、网站建设的关注点不是能为您做些什么网站,而是怎么做网站,有没有做好网站,给创新互联公司一个展示的机会来证明自己,这并不会花费您太多时间,或许会给您带来新的灵感和惊喜。面向用户友好,注重用户体验,一切以用户为中心。
场景:以前做网站的时候,导航栏的链接都是写死在页面中的,这样不易与维护。于是今天写成了用XML配置的导航栏。用到了LINQ to XML。
先介绍一下功能:
储存导航栏信息的XML文件如下:
Title是显示名称,Link是URL,OrderId表示排序的序位,Enabled为是否启用。这个菜单将最终被解析为一个ul列表:
然后我们来看看如何实现:
首先需要给菜单创建一个只包含属性的模型类,它的作用是成为对具体某一个菜单项的描述,系统中传递的将是这样一个模型:
- public class MenuItem
- {
- public string Title { get; set; }
- public string Link { get; set; }
- public int OrderId { get; set; }
- public bool Enabled { get; set; }
- }
接下来我们要写一个从XML读取所有菜单项,并返回List
- private List
GetList() - {
- var menuPath = Server.MapPath(@"~\App_Data\Menu.xml");
- if (System.IO.File.Exists(menuPath))
- {
- XElement root = XElement.Load(menuPath);
- var menuItems = from el in root.Elements("MenuItem")
- select new MenuItem()
- {
- Title = el.Attribute("Title").Value,
- Link = el.Attribute("Link").Value,
- OrderId = int.Parse(el.Attribute("OrderId").Value),
- Enabled = bool.Parse(el.Attribute("Enabled").Value)
- };
- return menuItems.ToList();
- }
- else
- {
- //throw new System.IO.FileNotFoundException();
- return null;
- }
- }
这个方法里我用了LINQ to XML,这是现在.NET操作XML最方便的办法。但LINQ要求你的Framework版本至少是3.5。在这个方法中,我们首先加载了 Menu.xml文件,然后查找所有MenuItem节点,并把这些节点的属性赋值给new出来的MenuItem对象。创建MenuItem对象的时 候,我使用的语法叫做对象初始化器。在return语句中,我写了ToList(),这样可以确保返回值是List
值得注意的是,我并没有把判断Enabled和对OrderId排序的逻辑写在这个方法中。因为判断是否启用和排序这两个操作属于业务逻辑,与数据 读取无关,所以我们分离了关注点,GetList()是趋于稳定的方法,任何业务需求的改变都不需要修改这个方法,因为它的目的很简单——仅仅是读取数 据。一个方法只做一件事情,这是一个原则。
接下来我们还需要写一个业务方法,从GetList()的菜单项中选择所有Enabled的菜单,并按OrderId升序排列:
- private void FetchMenuData()
- {
- var menuList = GetList();
- if (null != menuList && menuList.Count > 0)
- {
- // 查找所有已启用的菜单,并按OrderId升序排列
- var menuView = (from item in menuList
- where item.Enabled
- orderby item.OrderId ascending
- select item).ToList();
- rptMenu.DataSource = menuView;
- rptMenu.DataBind();
- }
- }
为了偷懒,我直接把查询结果绑给了Repeater控件。如果按照三层的思想,我不可以把显示这块写在这个业务方法里。本文不探讨分层,有兴趣的朋友可以看看《ASP.NET设计模式》这本书。
接下来,我们只要在页面上放一个Repeater控件,并在Page_Load的时候调用FetchMenuData()就完成了:
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!Page.IsPostBack)
- {
- FetchMenuData();
- }
- }
有图有真相:
DEMO下载和原文在 http://www.wyjexplorer.cn/Home/View/B1A9770CEC6D0C4C.html
原文链接:http://www.cnblogs.com/wyjexplorer/archive/2012/04/27/2473537.html
责任编辑:张伟
来源: 汪宇杰的博客 ASP.NET
文章题目:ASP.NET基于XML导航栏的制作
文章网址:http://www.shufengxianlan.com/qtweb/news19/543119.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联