首先说明本文为照顾刚入门的新手有些地方可能会稍微说点基础的东西高手可以直接忽略
场景以前做网站的时候导航栏的链接都是写死在页面中的这样不易与维护于是今天写成了用XML配置的导航栏用到了LINQ to XML
先介绍一下功能
储存导航栏信息的XML文件如下
Title是显示名称Link是URLOrderId表示排序的序位Enabled为是否启用这个菜单将最终被解析为一个ul列表
然后我们来看看如何实现
首先需要给菜单创建一个只包含属性的模型类它的作用是成为对具体某一个菜单项的描述系统中传递的将是这样一个模型
接下来我们要写一个从XML读取所有菜单项并返回List<MenuItem>泛型集合的方法在这个例子里List<MenuItem>里放的是所有个MenuItem对象
这个方法里我用了LINQ to XML这是现在NET操作XML最方便的办法但LINQ要求你的Framework版本至少是在这个方法中我们首先加载了 Menuxml文件然后查找所有MenuItem节点并把这些节点的属性赋值给new出来的MenuItem对象创建MenuItem对象的时 候我使用的语法叫做对象初始化器在return语句中我写了ToList()这样可以确保返回值是List<MenuItem>类 型
值得注意的是我并没有把判断Enabled和对OrderId排序的逻辑写在这个方法中因为判断是否启用和排序这两个操作属于业务逻辑与数据 读取无关所以我们分离了关注点GetList()是趋于稳定的方法任何业务需求的改变都不需要修改这个方法因为它的目的很简单仅仅是读取数 据一个方法只做一件事情这是一个原则
接下来我们还需要写一个业务方法从GetList()的菜单项中选择所有Enabled的菜单并按OrderId升序排列
为了偷懒我直接把查询结果绑给了Repeater控件如果按照三层的思想我不可以把显示这块写在这个业务方法里本文不探讨分层有兴趣的朋友可以看看《ASPNET设计模式》这本书
接下来我们只要在页面上放一个Repeater控件并在Page_Load的时候调用FetchMenuData()就完成了
有图有真相