成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET基于XML導(dǎo)航欄的制作

開發(fā) 后端
以前做網(wǎng)站的時候,導(dǎo)航欄的鏈接都是寫死在頁面中的,這樣不易與維護。于是今天寫成了用XML配置的導(dǎo)航欄。用到了LINQ to XML。

首先說明,本文為照顧剛?cè)腴T的新手,有些地方可能會稍微說點基礎(chǔ)的東西,高手可以直接忽略。

場景:以前做網(wǎng)站的時候,導(dǎo)航欄的鏈接都是寫死在頁面中的,這樣不易與維護。于是今天寫成了用XML配置的導(dǎo)航欄。用到了LINQ to XML。

先介紹一下功能:

儲存導(dǎo)航欄信息的XML文件如下:

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <NavigationMenu> 
  3.     <MenuItem Title="Shit" Link="/Fuck" OrderId ="2" Enabled="True" /> 
  4.     <MenuItem Title="Shitter" Link="/Fucker" OrderId ="1" Enabled="True" /> 
  5.     <MenuItem Title="Shitting" Link="/Fucking" OrderId ="3" Enabled="True" /> 
  6.     <MenuItem Title="Shitful" Link="/Fucked" OrderId ="4" Enabled="False" /> 
  7.     <MenuItem Title="Shitfully" Link="/Fuckly" OrderId ="5" Enabled="True" /> 
  8. </NavigationMenu> 

Title是顯示名稱,Link是URL,OrderId表示排序的序位,Enabled為是否啟用。這個菜單將最終被解析為一個ul列表:

  1. <ul> 
  2.     <li><a href="/Fucker">Shitter</a></li> 
  3.     <li><a href="/Fuck">Shit</a></li> 
  4.     <li><a href="/Fucking">Shitting</a></li> 
  5.     <li><a href="/Fuckly">Shitfully</a></li> 
  6. </ul> 

然后我們來看看如何實現(xiàn):

首先需要給菜單創(chuàng)建一個只包含屬性的模型類,它的作用是成為對具體某一個菜單項的描述,系統(tǒng)中傳遞的將是這樣一個模型:

 
 
  1. public class MenuItem  
  2. {  
  3.     public string Title { get; set; }  
  4.     public string Link { get; set; }  
  5.     public int OrderId { get; set; }  
  6.     public bool Enabled { get; set; }  

接下來我們要寫一個從XML讀取所有菜單項,并返回List<MenuItem>泛型集合的方法。在這個例子里,List<MenuItem>里放的是所有5個MenuItem對象。

  1. private List<MenuItem> GetList()  
  2. {  
  3.     var menuPath = Server.MapPath(@"~\App_Data\Menu.xml");  
  4.     if (System.IO.File.Exists(menuPath))  
  5.     {  
  6.         XElement root = XElement.Load(menuPath);  
  7.         var menuItems = from el in root.Elements("MenuItem")  
  8.                         select new MenuItem()  
  9.                         {  
  10.                             Title = el.Attribute("Title").Value,  
  11.                             Link = el.Attribute("Link").Value,  
  12.                             OrderId = int.Parse(el.Attribute("OrderId").Value),  
  13.                             Enabled = bool.Parse(el.Attribute("Enabled").Value)  
  14.                         };  
  15.  
  16.         return menuItems.ToList();  
  17.     }  
  18.     else  
  19.     {  
  20.         //throw new System.IO.FileNotFoundException();  
  21.         return null;  
  22.     }  

這個方法里我用了LINQ to XML,這是現(xiàn)在.NET操作XML最方便的辦法。但LINQ要求你的Framework版本至少是3.5。在這個方法中,我們首先加載了 Menu.xml文件,然后查找所有MenuItem節(jié)點,并把這些節(jié)點的屬性賦值給new出來的MenuItem對象。創(chuàng)建MenuItem對象的時 候,我使用的語法叫做對象初始化器。在return語句中,我寫了ToList(),這樣可以確保返回值是List<MenuItem>類 型。 

值得注意的是,我并沒有把判斷Enabled和對OrderId排序的邏輯寫在這個方法中。因為判斷是否啟用和排序這兩個操作屬于業(yè)務(wù)邏輯,與數(shù)據(jù) 讀取無關(guān),所以我們分離了關(guān)注點,GetList()是趨于穩(wěn)定的方法,任何業(yè)務(wù)需求的改變都不需要修改這個方法,因為它的目的很簡單——僅僅是讀取數(shù) 據(jù)。一個方法只做一件事情,這是一個原則。

接下來我們還需要寫一個業(yè)務(wù)方法,從GetList()的菜單項中選擇所有Enabled的菜單,并按OrderId升序排列:

 
 
  1. private void FetchMenuData()  
  2. {  
  3.     var menuList = GetList();  
  4.     if (null != menuList && menuList.Count > 0)  
  5.     {  
  6.         // 查找所有已啟用的菜單,并按OrderId升序排列  
  7.         var menuView = (from item in menuList  
  8.                         where item.Enabled  
  9.                         orderby item.OrderId ascending  
  10.                         select item).ToList();  
  11.  
  12.         rptMenu.DataSource = menuView;  
  13.         rptMenu.DataBind();  
  14.     }  

為了偷懶,我直接把查詢結(jié)果綁給了Repeater控件。如果按照三層的思想,我不可以把顯示這塊寫在這個業(yè)務(wù)方法里。本文不探討分層,有興趣的朋友可以看看《ASP.NET設(shè)計模式》這本書。

接下來,我們只要在頁面上放一個Repeater控件,并在Page_Load的時候調(diào)用FetchMenuData()就完成了:

  1. <ul> 
  2.     <asp:Repeater ID="rptMenu" runat="server"> 
  3.         <ItemTemplate> 
  4.             <li><a href="<%#Eval("Link")%>"><%#Eval("Title")%></a></li> 
  5.         </ItemTemplate> 
  6.     </asp:Repeater> 
  7. </ul> 
 
 
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     if (!Page.IsPostBack)  
  4.     {  
  5.         FetchMenuData();  
  6.     }  

有圖有真相:

DEMO下載和原文在 http://www.wyjexplorer.cn/Home/View/B1A9770CEC6D0C4C.html

原文鏈接:http://www.cnblogs.com/wyjexplorer/archive/2012/04/27/2473537.html

 

責(zé)任編輯:張偉 來源: 汪宇杰的博客
相關(guān)推薦

2009-07-28 14:40:15

XML數(shù)據(jù)ASP.NET

2009-07-27 14:46:16

XML和ASP.NET

2009-07-23 15:11:43

XML Web服務(wù)方法ASP.NET

2009-07-23 14:08:58

2009-07-23 15:18:30

創(chuàng)建XML Web服務(wù)ASP.NET

2009-07-28 16:29:06

XML Web服務(wù)ASP.NET構(gòu)造

2009-07-28 17:34:28

ASP.NET XML

2009-08-05 14:17:27

ASP.NET錯誤頁面

2009-07-27 03:21:00

breadcrumb導(dǎo)

2009-07-22 17:45:35

ASP.NET教程

2009-08-03 14:22:33

什么是ASP.NET

2009-07-28 17:17:19

ASP.NET概述

2009-09-04 13:11:25

ASP.NET生成XM

2009-07-28 17:28:49

XML Web服務(wù)使用ASP.NET

2009-08-10 17:50:05

ASP.NET安裝包制

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-27 15:48:43

2009-07-29 11:19:03

JavaScriptASP.NET

2009-07-29 16:33:28

GreeterLogiASP.NET

2009-07-29 14:52:12

IScriptContASP.NET
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩美香港a一级毛片免费 国产综合av | 91精品国产麻豆 | 国产精品99久久免费观看 | 日本在线免费看最新的电影 | 涩涩鲁亚洲精品一区二区 | 天堂一区二区三区 | 日韩中文字幕一区二区 | 一区二区三区四区在线视频 | 视频二区在线观看 | 国产精品久久久久久久久免费软件 | 欧美国产日韩一区二区三区 | 国产精品无| 久久久久久久久久久久久久久久久久久久 | 日韩在线欧美 | 91精品在线播放 | 中文在线视频观看 | 真人毛片| 欧美极品在线视频 | 国色天香综合网 | 中文字幕亚洲一区二区三区 | 成人一区在线观看 | 亚洲国产成人精品在线 | 天天天天天操 | 日韩精品在线一区 | 欧美在线视频不卡 | 在线欧美视频 | 天天综合永久 | 天天干天天操 | 国产真实精品久久二三区 | 羞羞视频在线观看 | 国产欧美精品一区二区三区 | 婷婷精品 | 久久福利电影 | 欧美日韩在线精品 | 91超碰在线观看 | 色综合99 | 暖暖日本在线视频 | 久久国产香蕉 | 中文字幕在线一区二区三区 | 久久精品福利视频 | 国产欧美三区 |