ASP.NET控件开发学习笔记--第3回 自制导航控件

 

3 自制导航控件

做了这么些Hello Wrold,已经出现审美疲劳,下面来点新鲜的东西,制作一个相对较综合的控件。比如我们制作网站时有一组链接需要放在一起,很多时候我们使用静态网页直接把这些链接呈现在浏览器内,这个方法并不好,能不能把链接名称和URL放在数据库内,自动生成一个模块容纳这些链接呢?当然,如果使用数据库的话,各位的机子上可能没有安装数据库,所以这里使用了XML来存储这些链接,以方便大家运行这个程序。另外,紧跟潮流,使内容和显示分离,我们使用CSS定制外观。虽然使用到了其他技术,但效果感觉还是不错的,下面就来制作这个控件。

首先建立XML文件存储链接,在虚拟目录下新建一个“linksList.xml”,输入代码如下:

3-1代码1linksList.xml代码

 

<?xml version="1.0" encoding="utf-8" ?>
<MyLinks>
    
<link>
        
<name>我的博客</name>
        
<url>http://cgbluesky.blog.163.com/</url>
    
</link>
    
<link>
        
<name>北京大学出版社第六事业部</name>
        
<url>http://www.pup6.com/ebook.htm</url>
    
</link>
    
<link>
        
<name>网易学院</name>
        
<url>http://tech.163.com/school/video/</url>
    
</link>
    
<link>
        
<name>eNet硅谷动力网络学院</name>
        
<url>http://tech.163.com/school/video/</url>
    
</link>
    
<link>
        
<name>细品人生</name>
        
<url>http://blog.sina.com.cn/chanamy</url>
    
</link>
</MyLinks>

 

这里存储了一个link表,表有两个字段,第一个字段是name,表示链接名,第二个字段是url,表示链接地址。接下来制作控件,在App_Code文件夹下新建一个“linksList.cs”文件,输入代码如下:

3-1代码2linksList.cs代码


using System;
using System.Web.UI;
using System.Data;
using System.Data.OleDb;
[assembly:TagPrefix(
"MyControl""CG")]
namespace MyControl
{
    
public class LinksControl:Control
    {
        
protected override void Render(HtmlTextWriter writer)
        {
            writer.WriteLine(
"<ul>");
            writer.WriteLine(
"<li id='caption'>我的导航控件</li>");
            
string s;
            DataSet ds
=new DataSet();
            ds.ReadXml(Page.Server.MapPath(
"linksList.xml"));
            
foreach(DataRow row in ds.Tables["link"].Rows)
            {
                s
="<li><a href='";
                s
+=row["url"].ToString();
                s
+="'target='_blank'>";
                s
+=row["name"].ToString();
                s
+="</a></li>";
                writer.WriteLine(s);
            }
            writer.WriteLine(
"</ul>");
        }
    }
}

 

从这段代码可以看出,我们使用无序列表来显示这些链接,列表的第一项为导航条名称。这里使用DataSet来读取XML,使用非常方便。DataSet控件真是强悍,不但能装下整个数据库,还能如此方便地控制XML。这个控件所输出的列表素面朝天,并不是能让人满意,下面使用一个CSS来装饰它。在虚拟目录下新建一个“linkslist.css”文件,在其中输入如下代码:

3-1代码3linkslist.css代码


ul
{
    list-style-type
:none;
    margin
:5px;
    padding
:2px;
    border
:1px solid #DDDDDD;
    width
:200px;
    font
:12px 宋体,sans-serif;
}
li
{
    background
: #DDDDDD;
    margin
:0;
    border
:1px solid #fff;
}
#caption
{
    color
:#FFF;
    background
: #663333;
    padding
:2px 10px;
    font
:bold;
}
ul a:link, ul a:visited, ul a:hover, ul a:active
{
    color
:#333;
    display
:block;
    padding
:2px 10px;
    text-decoration
:none;
}
ul a:hover
{
    color
:#FFF;
    background
:#666;
}

 

好!所有准备工作都做完了,下面调用控件来看看效果如何。在虚拟目录下新建一个“linkslist.aspx”文件,并输入如下代码:

3-1代码4linkslist.aspx代码


<%@Register TagPrefix="CG" Namespace="MyControl" %>
<html>
    
<head>
        
<title>Chapter 5: Background Images</title>
        
<link rel='Stylesheet' media="screen" type='text/css' href='linkslist.css' />
    
</head>
    
<body>
        
<div id="container">
        
<CG:LinksControl runat="server" />
        
</div>
    
</body>
</html>

 

在浏览器中运行linkslist.aspx文件,效果如图3-1所示。很棒吧!



 

经过CSS的修饰,列表中的项看上去很象按钮,鼠标放上去时会自动改变颜色。为了演示使用这个控件好好处,我们更改XML文件,在里面多加一个链接:

3-2代码1linksList.xml代码


<?xml version="1.0" encoding="utf-8" ?>
<MyLinks>
    
<link>
        
<name>我的博客</name>
        
<url>http://cgbluesky.blog.163.com/</url>
    
</link>
    
<link>
        
<name>浪曦视频在线</name>
        
<url>http://bbs.langsin.com/</url>
    
</link>
    
<link>
        
<name>北京大学出版社第六事业部</name>
        
<url>http://www.pup6.com/ebook.htm</url>
    
</link>
    
<link>
        
<name>网易学院</name>
        
<url>http://tech.163.com/school/video/</url>
    
</link>
    
<link>
        
<name>eNet硅谷动力网络学院</name>
        
<url>http://tech.163.com/school/video/</url>
    
</link>
    
<link>
        
<name>eNet细品人生</name>
        
<url>http://blog.sina.com.cn/chanamy</url>
    
</link>
</MyLinks>

 

然后更改样式,修改linkslist.css代码如下:

3-2代码2linkslist.css代码


ul
{
    list-style-type
:none;
    margin
:5px;
    padding
:1px;
    border
:1px solid #333;
    width
:200px;
    font
:12px 宋体,sans-serif;
}
li
{
    background
: #ABD1BD;
    margin
:0;
    border-left
:1px solid #fff;
    border-top
:1px solid #fff;
    border-right
:1px solid #aaa;
    border-bottom
:1px solid #666;
}
#caption
{
    color
:#FFF;
    background
: #557A66;
    padding
:2px 10px;
    font
:bold;
}
ul a:link, ul a:visited, ul a:hover, ul a:active
{
    color
:#000;
    display
:block;
    padding
:2px 10px;
    text-decoration
:none;
}
ul a:hover
{
    color
:#FFF;
    background
:#147E46;
}
 

再次运行linkslist.aspx,效果如图3-2所示:


 

这一次,不但自动增加了一个链接,而且,控件的外观也改变了。但它还有一些缺点,比如导航条的标题栏内容不能定制,所读取的XML文件也不能定制,该如何解决呢?请听下回分解。


posted @ 2008-02-25 10:06  abatei  阅读(1676)  评论(9编辑  收藏  举报