探索 ASP.NET Futures_.Net教程
推薦:一個(gè)不被flash、select、activex遮擋的、跨frame的無(wú)限分級(jí)菜單一個(gè)不被flash、select、activex遮擋的、跨frame的無(wú)限分級(jí)菜單 該菜單改良自著名的chromemenu,可以無(wú)限分級(jí),使用方法: 1、添加主菜單項(xiàng) 找到類似下面代碼的部分:
如果你在使用ASP.NET站點(diǎn),同時(shí)又希望它Search Engine Friendly一些,很可能你就希望它有一個(gè)Sitemaps。在這里我們說(shuō)的不是ASP.NET的SiteMap,而是Sitemaps.org定義的基于XML的Sitemaps協(xié)議,注意這兩個(gè)名字的大小寫(xiě)以及單復(fù)數(shù),之后我都會(huì)這樣區(qū)分它們。Sitemaps協(xié)議有點(diǎn)類似RSS或者Atom,只不過(guò)它描述的不是最近的內(nèi)容更新,而是整個(gè)站點(diǎn)的地圖,主要用來(lái)描述特定URL的重要程度、更新時(shí)間及頻率等。搜索引擎如Google是支持Sitemaps的,通過(guò)Google Webmaster Tools(以前叫做Google Sitemaps)你可以提交你的站點(diǎn)的Sitemaps,以便Google更好地索引你的網(wǎng)站。
簡(jiǎn)單調(diào)用
在ASP.NET Futures (May CTP)之前,如果你想要為你的ASP.NET站點(diǎn)增加Sitemaps支持,恐怕必須自己實(shí)現(xiàn)一個(gè)特殊的頁(yè)面(或者HttpHandler)用于讀取ASP.NET SiteMap并輸出為Sitemaps協(xié)議。而現(xiàn)在這工作可以交給ASP.NET Futures的AspNetSiteMapSearchSiteMapProvider來(lái)做了,你需要做的僅僅是在web.config中寫(xiě)上幾句。由于這個(gè)功能屬于ASP.NET Futures中SearchSiteMap這個(gè)類別,所以需要在web.config中對(duì)該節(jié)進(jìn)行配置:
| 以下為引用的內(nèi)容: <microsoft.web.preview> |
在這個(gè)配置里面,我們啟用了SearchSiteMap,然后配置了一個(gè)名為"Navigation"的Provider,此Provider使用AspNetSiteMapSearchSiteMapProvider類,就這么簡(jiǎn)單,和配置任何其他Provider的形式完全一致。之后你還需要確保一下有關(guān)的HttpHandler配置好了,如果你新建網(wǎng)站時(shí)使用的模板是ASP.NET Futures的,那么HttpHandler就應(yīng)該配置好的了,配置信息如下:
| 以下為引用的內(nèi)容: <add verb="*" path="SearchSiteMaps.axd" type="Microsoft.Web.Preview.Search.SearchSiteMapHandler" validate="True"/> |
這時(shí)候,如果你的網(wǎng)站已經(jīng)正常啟用ASP.NET自身的SiteMap功能,例如使用靜態(tài)的Web.sitemap,那么訪問(wèn)SearchSiteMap.axd就應(yīng)該能看到按照Sitemaps協(xié)議輸出的結(jié)果。這時(shí)候或許你會(huì)很奇怪,為什么結(jié)果只有一條記錄呢?這就是Sitemaps的遞歸調(diào)用了,這個(gè)主Sitemaps僅僅聲名了我們之前配置的那個(gè)名為"Navigation"的Sitemaps的地址,也就是SearchSiteMaps.axd?sitemap=Navigation。打開(kāi)這個(gè)地址,你會(huì)發(fā)現(xiàn)仍然是一個(gè)Sitemaps,它里面包含的就是ASP.NET SiteMap提供的數(shù)據(jù)了。
深入看看
接下來(lái),我們用Reflector來(lái)看看Microsoft.Web.Preview.Search下面的一些類的實(shí)現(xiàn)方式。我不準(zhǔn)備詳細(xì)分析代碼了,因?yàn)榇a都很簡(jiǎn)單,直接說(shuō)說(shuō)看完的結(jié)果吧。如果你之前瀏覽根據(jù)SiteMap生成的Sitemaps時(shí)發(fā)現(xiàn)少了些東西,在這里你就知道如何把這些項(xiàng)目補(bǔ)充上去了。Sitemaps協(xié)議中關(guān)于一個(gè)URL能夠包括以下幾樣信息:
地址:也就是URL本身
最后更新時(shí)間
更新頻率:此URL的內(nèi)容多久更新一次
重要程度:一個(gè)0到1的值,默認(rèn)值為0.5,搜索引擎并不一定根據(jù)這個(gè)值來(lái)判斷URL的真正重要程度
然而自動(dòng)生成的Sitemaps僅僅包括前兩項(xiàng)信息,如果我們需要后兩項(xiàng)信息就需要手動(dòng)增加。怎樣手動(dòng)增加呢?因?yàn)镾iteMapNode類似于字典,能夠訪問(wèn)this [string key],所以只要SiteMapNode[]存在"lastModified"/"changeFrequency"/"priority"這幾個(gè)值就能自動(dòng)輸出到Sitemaps中,而且"lastModified"會(huì)覆蓋對(duì)應(yīng)Page的aspx文件的真實(shí)最后更新時(shí)間。
簡(jiǎn)單舉例說(shuō)明這功能怎么用,假設(shè)你使用的是靜態(tài)的Web.sitemap,我們已經(jīng)習(xí)慣這樣定義一個(gè)SiteMapNode:
| 以下為引用的內(nèi)容: <siteMapNode url="Default.aspx" title="Welcome" description="" /> |
而增加特定的屬性只需要這樣定義:
| 以下為引用的內(nèi)容: <siteMapNode url="Default.aspx" title="Welcome" description="" changeFrequency="daily" priority="0.8" /> |
支持Dynamic Data
上面說(shuō)了那么多,也就僅僅能做到支持系統(tǒng)自帶的SiteMap,而實(shí)際上SearchSiteMap還能夠?qū)ynamic Data提供特殊的支持。Dynamic Data簡(jiǎn)單易用,好像Ruby on Rails那樣支持scaffolding,預(yù)覽了ASP.NET將來(lái)在敏捷方面的發(fā)展。有關(guān)Dynamic Data Control的詳細(xì)信息,請(qǐng)參考Dflying的文章,我們這里僅討論SearchSiteMap的支持:
ASP.NET Futures初探——動(dòng)態(tài)數(shù)據(jù)控件(Dynamic Data Control):入門(mén)
ASP.NET Futures初探——動(dòng)態(tài)數(shù)據(jù)控件(Dynamic Data Control):深入一些
需要支持Dynamic Data的話,首先你要實(shí)現(xiàn)自己的DynamicDataSearchSiteMapProvider。大家不要一看到要繼承自系統(tǒng)類實(shí)現(xiàn)自己的類就覺(jué)得是非常復(fù)雜的事情,其實(shí)這里我們僅需要override掉一個(gè)函數(shù),也就是DynamicDataSearchSiteMapProvider.DataQuery()。在這個(gè)函數(shù)中,我們需要返回一個(gè)IEnumerable,其中的元素需要具有主鍵列名屬性以及以下屬性:
| 以下為引用的內(nèi)容: SiteMapLastModified SiteMapChangeFrequency SiteMapPriority |
你很可能會(huì)問(wèn),為什么要是不確定類型的IEnumerable而不是確定類型的List<>呢?想想.NET Framework的什么部分用IEnumerable用得最多吧,那就是LINQ。如果你在QueryData()中直接使用LINQ來(lái)篩選數(shù)據(jù),你就不需要?jiǎng)?chuàng)建自定義類型并且自己填充IEnumerable了。況且,主鍵列名也不是確定的,如果用一個(gè)屬性記錄其名稱用另外一個(gè)屬性記錄其值那就很麻煩了,所以ASP.NET Futures選擇了上述充分發(fā)揮LINQ優(yōu)勢(shì)的做法。
最后,我個(gè)人感覺(jué)SearchSiteMapProviderBase的設(shè)計(jì)有點(diǎn)問(wèn)題,它作為AspNetSiteMapSearchSiteMapProvider與DynamicDataSearchSiteMapProvider的基類,其中包括QueryData()方法,然而此方法只有DynamicDataSearchSiteMapProvider用到,很顯然就應(yīng)該將它放置到DynamicDataSearchSiteMapProvider里面。
分享:學(xué)習(xí)asp.net之SQL語(yǔ)句查詢效率和安全性看一看這段代碼,讓我們來(lái)看看主要存在的問(wèn)題 以下為引用的內(nèi)容: //設(shè)置SQL語(yǔ)句 insertstr="insert into userinf
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- asp.net2.0 URL重寫(xiě)以及urlMappings問(wèn)題(1)
- DataGrid表頭不動(dòng),表身動(dòng)
- 使用ASP.NET開(kāi)發(fā)移動(dòng)通訊的幾種方法
- asp.net CheckBoxList各項(xiàng)最小寬度CSS樣式(兼容性good)
- 動(dòng)態(tài)代理DynamicProxy 介紹
- 解讀ASP.NET常用路徑(path)獲取方法對(duì)照表
- ASP.NET實(shí)現(xiàn)頁(yè)面間值傳遞的幾種方法
- 在ASP.Net 2.0中實(shí)現(xiàn)多語(yǔ)言界面的方法
- ASP.NET如何改變checkboxlist選中項(xiàng)字體顏色
- 幾種判斷asp.net中session過(guò)期方法的比較
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-探索 ASP.NET Futures
。