zoukankan      html  css  js  c++  java
  • 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文件也不能定制,该如何解决呢?请听下回分解。


  • 相关阅读:
    svn command line tag
    MDbg.exe(.NET Framework 命令行调试程序)
    Microsoft Web Deployment Tool
    sql server CI
    VS 2010 One Click Deployment Issue “Application Validation did not succeed. Unable to continue”
    mshtml
    大厂程序员站错队被架空,只拿着五折工资!苟活和离职,如何选择?
    揭秘!Windows 为什么会蓝屏?微软程序员竟说是这个原因...
    喂!千万别忘了这个C语言知识!(~0 == -1 问题)
    Linux 比 Windows 更好,谁反对?我有13个赞成理由
  • 原文地址:https://www.cnblogs.com/abatei/p/1080207.html
Copyright © 2011-2022 走看看