日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ASP.NET基于XML導(dǎo)航欄的制作

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

成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)的關(guān)注點(diǎn)不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒(méi)有做好網(wǎng)站,給創(chuàng)新互聯(lián)公司一個(gè)展示的機(jī)會(huì)來(lái)證明自己,這并不會(huì)花費(fèi)您太多時(shí)間,或許會(huì)給您帶來(lái)新的靈感和驚喜。面向用戶友好,注重用戶體驗(yàn),一切以用戶為中心。

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

先介紹一下功能:

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

  
 
 
 
  1.  
  2.  
  3.      
  4.      
  5.      
  6.      
  7.      
  8.  

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

  
 
 
 
    •  
    •     
    • Shitter
    •  
    •     
    • Shit
    •  
    •     
    • Shitting
    •  
    •     
    • Shitfully
    •  
     

然后我們來(lái)看看如何實(shí)現(xiàn):

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

   

   
 
 
 
  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; }  

接下來(lái)我們要寫一個(gè)從XML讀取所有菜單項(xiàng),并返回List泛型集合的方法。在這個(gè)例子里,List里放的是所有5個(gè)MenuItem對(duì)象。

  
 
 
 
  1. private List 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.     }  

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

值得注意的是,我并沒(méi)有把判斷Enabled和對(duì)OrderId排序的邏輯寫在這個(gè)方法中。因?yàn)榕袛嗍欠駟⒂煤团判蜻@兩個(gè)操作屬于業(yè)務(wù)邏輯,與數(shù)據(jù) 讀取無(wú)關(guān),所以我們分離了關(guān)注點(diǎn),GetList()是趨于穩(wěn)定的方法,任何業(yè)務(wù)需求的改變都不需要修改這個(gè)方法,因?yàn)樗哪康暮芎?jiǎn)單——僅僅是讀取數(shù) 據(jù)。一個(gè)方法只做一件事情,這是一個(gè)原則。

接下來(lái)我們還需要寫一個(gè)業(yè)務(wù)方法,從GetList()的菜單項(xiàng)中選擇所有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控件。如果按照三層的思想,我不可以把顯示這塊寫在這個(gè)業(yè)務(wù)方法里。本文不探討分層,有興趣的朋友可以看看《ASP.NET設(shè)計(jì)模式》這本書。

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

  
 
 
 
    •  
    •      
    •          
    •             
    • "><%#Eval("Title")%>
    •  
    •          
    •      
     

   

   
 
 
 
  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é)任編輯:張偉
來(lái)源: 汪宇杰的博客 ASP.NET


新聞標(biāo)題:ASP.NET基于XML導(dǎo)航欄的制作
本文路徑:http://www.5511xx.com/article/cdhdsoo.html