记得小时候的愿望就是:长大了不要当老师。我也不知道为什么会有这样的想法,更准确的说,是我不记得我当时为什么会有这样的想法。我的记忆就像是一个队列,新的进来了,那么旧的也就忘记了。
而现在的我,却会坚持在CSDN这么差劲的地方(个别大虾除外)发表这么差劲的文章。真是不可思议啊。
不好意思,调整一下情绪。(低落-->骚包)
智商太高总是一种烦恼,刚接受了公司出考题的任务,又接到了十几个文档翻译的任务,没办法,谁叫我的英语太“失重”了呢?时间没有增加,两天一十四个HOUR另外还有一个中午参加培训(其实以我这样的实力,参加培训实在是太那个那个了啊...)
因此关于ASP.NET的学习也就自然而然成了一个翻译。没有实践,没有理解。当然,本来以我的实力是不需要实践或者什么理解的,但是,我坚信学无止境,那么,后面再进行我独特的深刻无比的实践理解吧。(请各位一定要相信,以我这样的才能绝对不是不理解和不会做的)
微软和XML的相恋已经不是一个秘密了,因此它喜欢用它最擅长的后缀名来为XML MM 进行各种装饰。web.sitemap已经是ASP.NET 2.0出现的第N个新后缀名了。
这里要提一下,导航数据是可以使用各种方式存储的,只要提供相应的provider,就可以了。由于是QuickStart的学习,因此这部分内容就不提了,下面提到的都是使用默认的XML方式存储。
首先我们要需要一个Web.SiteMap这样的XML格式的文件来存储导航数据。它的根元素是siteMap,它的任何层次的子元素都叫siteMapNode,但是在根元素底下必须有一个唯一的子元素siteMapNode。有三个基本的属性:url,title和description,看名字就明白它是什么意思了。当然,可以随意增加自定义属性,使用字符串索引来访问就可以了。
在页面中使用导航API更是简单。首先,需要一个SiteMapDataSource控件,指定它的ID和runat=server就OK了,面包屑导航控件也是这样的,它的名字是SiteMapPath。而使用前面笔记中提到过的TreeView和Menu就是多指定一个DataSourceId到SiteMapDataSource控件的ID就是了。
SiteMap类提供了在程序中访问导航数据的方法,这些属性或方法是静态的。CurrentNode属性提供了对当前路径的访问。
SiteMap可以为每个用户提供其拥有权限的部分导航数据而不用编写代码。也可以调用资源文件来本地化导航数据,可以为各个语言提供相应的资源文件。这些涉及到后面要学到的内容,因此,一笔代过了。
也可以在程序中个性SiteMap的内容。在Applicaiont_Start方法中注册事件
SiteMap.Provider.SiteMapResolve += new SiteMapResolveEventHandler(yourmethod);
然后在方法中修改,注意,SiteMap的内容是只读的,要修改的话,必须使用Clone()方法复制新 的节点来修改。比如我们可以给SiteMapNode的URL加上QueryString。
最后一点是映射,在Web.Config中指定Web.SiteMap中URL的映射,通过这种方式,你可以给用户提供相对较友好的URL,而不是一大串QueryString的URL。指定方法如下,在System.Web元素下
<urlMappings enabled="true">
<add
url="~/Category.aspx"
mappedUrl="~/Default.aspx?category=default" />
</urlMappings>