ASP.NET站點(diǎn)導(dǎo)航應(yīng)用詳解
導(dǎo)航實(shí)際上給訪問(wèn)者提供了一個(gè)地圖類(lèi)似的東西,讓訪問(wèn)者更快地找到想要的東西。
在2.0中引入了一個(gè)很重要的概念,那就是站點(diǎn)地圖siteMap這樣一個(gè)XML文件,但是它后綴不是XML。
若要為站點(diǎn)創(chuàng)建一致的、容易管理的導(dǎo)航解決方案,可以使用asp.net站點(diǎn)導(dǎo)航。asp.net站點(diǎn)導(dǎo)航提供下列功能:



在了解了一些基本知識(shí)后,我們來(lái)做一個(gè)簡(jiǎn)單的導(dǎo)航的例子。
1、首先創(chuàng)建一個(gè)master
html代碼:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="mp.master.cs" Inherits="Navigation.mp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<table style="width: 656px; height: 255px">
<tr>
<td style="width: 500px; background-color: #99ccff">
您當(dāng)前的位置在:
<asp:SiteMapPath ID="SiteMapPath1" runat="server" Font-Names="Verdana"
Font-Size="0.8em" PathSeparator=" : ">
<CurrentNodeStyle ForeColor="#333333" />
<NodeStyle Font-Bold="True" ForeColor="#990000" />
<PathSeparatorStyle Font-Bold="True" ForeColor="#990000" />
<RootNodeStyle Font-Bold="True" ForeColor="#FF8000" />
</asp:SiteMapPath>
</td>
</tr>
<tr>
<td style="width: 500px">
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
<tr>
<td style="width: 500px; background-color: #ebebff">
版權(quán)所有 。。。。。。。</td>
</tr>
</table>
</div>
</form>
</body>
</html> 顯示的效果:

2、建立如下導(dǎo)航結(jié)構(gòu)(統(tǒng)一應(yīng)用上面的master)

3、添加站點(diǎn)地圖(名稱(chēng)不可以改)
Web.sitemap下的代碼如下:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="a.aspx" title="首頁(yè)" description="1"> <siteMapNode url="b.aspx" title="根目錄B頁(yè)" description="2" /> <siteMapNode url="Default.aspx" title="Default頁(yè)" description="3" /> <siteMapNode url="" title="one目錄" description="4"> <siteMapNode url="~/one/a.aspx" title="one目錄下的a" description="5"/> <siteMapNode url="~/one/b.aspx" title="one目錄下的b" description="6"/> <siteMapNode url="" title="one目錄下的once目錄" description="7"> <siteMapNode url="~/one/once/a.aspx" title="one目錄下的once目錄下的a" description="8"/> <siteMapNode url="~/one/once/b.aspx" title="one目錄下的once目錄下的b" description="9"/> </siteMapNode> </siteMapNode> <siteMapNode url="" title="two目錄" description="10"> <siteMapNode url="~/two/a.aspx" title="two目錄下的a" description="11"/> <siteMapNode url="~/two/b.aspx" title="two目錄下的b" description="12"/> </siteMapNode> <siteMapNode url="sitemap.aspx" title="動(dòng)態(tài)修改內(nèi)存中" description="動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖"/> </siteMapNode> </siteMap>
4、在根目錄下a.aspx,放一個(gè)treeView控件。新建數(shù)據(jù)源為我們建立的站點(diǎn)地圖。
運(yùn)行后,我們便可以看到效果如圖所示:

接下來(lái)會(huì)講動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖,什么叫動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖,到底是什么意思呢?
例如文章列表中通常都有多篇,我們總不能把這些都放到站點(diǎn)地圖中去,何況文章ID、欄目編號(hào)、商品分類(lèi)或者商品ID也不是我們事先能夠預(yù)料到的,那么站點(diǎn)地圖里沒(méi)有,外面就不能顯示,該怎么辦呢?這就需要用到動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖了。
如上面提出的問(wèn)題,我們假設(shè)有一個(gè)文章管理系統(tǒng)結(jié)構(gòu)如下:
首頁(yè)-新聞-國(guó)際新聞(列表)
那么可以假設(shè)國(guó)際新聞這一級(jí)的頁(yè)面是list.aspx,不同的欄目會(huì)有不同的ID,那么地址結(jié)構(gòu)就假設(shè)如下:
xxx.com--~/news/--list.aspx?id=3&page=12
這樣一個(gè)結(jié)構(gòu),我們對(duì)新聞列表頁(yè)的處理就可以只在站點(diǎn)地圖中靜態(tài)地寫(xiě)上url="~/news/list.aspx"。那么如果在別人瀏覽時(shí)呈現(xiàn)出上面的結(jié)構(gòu)呢,我們接下來(lái)處理。
Web.sitemap:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" > <siteMapNode url="a.aspx" title="首頁(yè)" description="1"> <siteMapNode url="b.aspx" title="根目錄B頁(yè)" description="2" /> <siteMapNode url="Default.aspx" title="Default頁(yè)" description="3" /> <siteMapNode url="" title="one目錄" description="4"> <siteMapNode url="~/one/a.aspx" title="one目錄下的a" description="5"/> <siteMapNode url="~/one/b.aspx" title="one目錄下的b" description="6"/> <siteMapNode url="" title="one目錄下的once目錄" description="7"> <siteMapNode url="~/one/once/a.aspx" title="one目錄下的once目錄下的a" description="8"/> <siteMapNode url="~/one/once/b.aspx" title="one目錄下的once目錄下的b" description="9"/> </siteMapNode> </siteMapNode> <siteMapNode url="" title="two目錄" description="10"> <siteMapNode url="~/two/a.aspx" title="two目錄下的a" description="11"/> <siteMapNode url="~/two/b.aspx" title="two目錄下的b" description="12"/> </siteMapNode> <siteMapNode url="sitemap.aspx" title="動(dòng)態(tài)修改內(nèi)存中" description="動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖"/> </siteMapNode> </siteMap>
主要就是用到title為動(dòng)態(tài)修改內(nèi)存中的這一句來(lái)演示。
然后在演示頁(yè)面sitemap.aspx中放一個(gè)SitemapPath控件,注意設(shè)置它的renderCurrentNodeAsLink為true(指示當(dāng)前結(jié)點(diǎn)為鏈接)
頁(yè)面的后臺(tái)代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Navigation
{
public partial class sitemap : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//首先我們?cè)谶@里注冊(cè)一個(gè)事件,也就是說(shuō)在訪問(wèn)CurrentNode屬性的時(shí)候觸發(fā)這個(gè)事件
SiteMap.SiteMapResolve+=new SiteMapResolveEventHandler(SiteMap_SiteMapResolve);
}
SiteMapNode SiteMap_SiteMapResolve(object sender,SiteMapResolveEventArgs e)
{
//我們自定義的處理方法 獲取并創(chuàng)建當(dāng)前節(jié)點(diǎn)的副本,并同時(shí)復(fù)制他的上級(jí)節(jié)點(diǎn)
SiteMapNode CurrentNode = SiteMap.CurrentNode.Clone(true);
SiteMapNode TempNode = CurrentNode;
int id = nid();
int page = npage();
//從下面方法中得到變量
if (id>0)
{
TempNode.Url = TempNode.Url + "?id=" + id.ToString();
}
if (id>0 && page>=0)
{
TempNode.Url = TempNode.Url + "&page=" + page.ToString();
}
else if (page>0)
{
TempNode.Url = TempNode.Url + "?page=" + page.ToString();
}
return TempNode;
}
//隨便設(shè)置一個(gè)數(shù)。
private int nid()
{
return 3;
}
private int npage()
{
return 12;
}
}
} 解釋?zhuān)荷厦娴膎id()和npage(),是用來(lái)獲取參數(shù)的兩個(gè)方法,實(shí)際中根據(jù)實(shí)際情況而定。
運(yùn)行,我們看看這個(gè)鏈接的屬性:

到此,我們就很簡(jiǎn)單的實(shí)現(xiàn)了動(dòng)態(tài)修改內(nèi)存中的站點(diǎn)地圖了!
站點(diǎn)導(dǎo)航,是我們?cè)贐S開(kāi)發(fā)中非常常用的,所以我們還是很有必要深刻掌握的,接下來(lái)還會(huì)發(fā)相關(guān)的文章,與大家一討論學(xué)習(xí)!
- 在ASP.NET 2.0中操作數(shù)據(jù)之三:創(chuàng)建母版頁(yè)和站點(diǎn)導(dǎo)航
- ASP.Net分頁(yè)的分頁(yè)導(dǎo)航實(shí)例
- ASP.NET網(wǎng)站導(dǎo)航及導(dǎo)航控件如何使用
- EasyUI Tree+Asp.net實(shí)現(xiàn)權(quán)限樹(shù)或目錄樹(shù)導(dǎo)航的簡(jiǎn)單實(shí)例
- 利用.net控件實(shí)現(xiàn)下拉導(dǎo)航菜單制作的具體方法
- Asp.net 頁(yè)面導(dǎo)航的幾種方法與比較 分享
- .net中使用xsl文件作為導(dǎo)航菜單的小例子
- Jquery.TreeView結(jié)合ASP.Net和數(shù)據(jù)庫(kù)生成菜單導(dǎo)航條
相關(guān)文章
Asp.net靜態(tài)方法之Grid轉(zhuǎn)DataTable方法實(shí)現(xiàn)步驟
GridView綁定DataTable后,如何獲取GridView綁定后顯示的值,在項(xiàng)目需求的背景下寫(xiě)了一個(gè)靜態(tài)方法,經(jīng)過(guò)在項(xiàng)目中的使用,bug的修復(fù),較為穩(wěn)定2013-04-04
微軟ajax庫(kù)的使用方法(ajax.ajaxMethod)
使用AjaxMethod可以在客戶(hù)端異步調(diào)用服務(wù)端方法,簡(jiǎn)單地說(shuō)就是在JS里調(diào)用后臺(tái).cs文件里的方法,做一些JS無(wú)法做到的操作,如查詢(xún)數(shù)據(jù)庫(kù)2013-08-08
ASP.NET 廣告控件AdRotator的使用方法與實(shí)例
廣告控件是asp.net中一個(gè)獨(dú)有的東西,他可以利用asp.net來(lái)生成廣告控件所需的xml文檔,然后再利用AdRotator來(lái)調(diào)用廣告xml文件,根據(jù)我們的參考進(jìn)行顯示2013-08-08
ASP.NET?Core?6.0?基于模型驗(yàn)證的數(shù)據(jù)驗(yàn)證功能
這篇文章主要介紹了ASP.NET?Core?6.0?基于模型驗(yàn)證的數(shù)據(jù)驗(yàn)證,本文描述的數(shù)據(jù)驗(yàn)證方案,是基于官方的模型驗(yàn)證(Model validation),需要的朋友可以參考下2022-07-07
VB.NET 中刪除DataGridView中所選行的小例子
之前為這個(gè)刪除所選行還費(fèi)了點(diǎn)腦筋,因?yàn)槊縍emoveat一行之后,后面的行會(huì)自動(dòng)縮進(jìn),而且會(huì)自動(dòng)選中下一行,很麻煩,后來(lái)發(fā)現(xiàn)很簡(jiǎn)單:2013-04-04
asp.net中對(duì)象失去焦點(diǎn)時(shí)自動(dòng)提交數(shù)據(jù) V2
一年多前,Insus.NET有寫(xiě)過(guò)一篇 《對(duì)象失去焦點(diǎn)時(shí)自己動(dòng)提交數(shù)據(jù)》,那一篇是依賴(lài)Linkbutton來(lái)做隱藏提交。是否有不用依賴(lài)Linkbutton方法呢? 答案是肯定的2012-11-11
IdentityServer4實(shí)現(xiàn).Net Core API接口權(quán)限認(rèn)證(快速入門(mén))
這篇文章主要介紹了IdentityServer4實(shí)現(xiàn).Net Core API接口權(quán)限認(rèn)證,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

