要求:导航条上的栏目是由数据库中获得,但不显示全部的栏目,按照其排列的序号显示N个在导航条上(此操作是在后台页面设置的),有的栏目有子栏目,点击时呈现下拉菜单的效果显示子栏目,没子栏目的点击后直接跳转到指定页面。 望广大高手们指点小弟~!

解决方案 »

  1.   

    ASP。NET MENU1.2使用说明:1、安装:由于在它的官方网站上写的很清楚,用以前的1.1注册码就可以注册,所以我找了个1.1的注册机,如里只能看这篇文章,可以参考如下注册码:2110-0404-4033-6597
     下载地址:http://www.aspnetmenu.com/download/ASPnetMenu_setup.msi
    2、安装后,一般放在C:\Program Files\ASPnetMenu下,要想看到例子,还要进来后再次安装:ASPnetMenu_examples.msi,默认虚拟目录:ASPnetMenu,默认端口是:80
    3、在开始菜单中找到ASP.NET MENU的项目,选中Examples - Start Page.htm第一个例子:Basic Horizontal
    运行地址:http://localhost/ASPnetMenu/design/basicHorizontal/WebForm1.aspx
    物理目录地址:wwwroot/ASPnetMenu/Design/basicHorizontal/ (1)将C:\Program Files\ASPnetMenu\ASPnetMenu.dll添加到工具箱
    (2)拖放此控件到空白页面,将例子演示里的IMAGES目录和XML文件拷当前目录下。并在解决方案中添加menudata.xml进来。设定AspNetMenu 控件的MenuData属性为menudata.xml
    (3)现在就可以直接运行项目看到效果了。但这时看不到中文的菜单,因为如果我们把XML里的相关项目改为中文,会出现:给定编码中有无效的字符 这样的错误。解决办法是:
    用记事本打它menudata.xml文件,直接选另存为:文件名不变,把编码改为:UTF-8,提示是不是覆盖时选是。再次运行项目。以后要想每改一下XML文件内容,直接用VS是不行的,要用记事本打开,然后再次另存为UTF-8才行!(FIT!!!)
       附另一解决办法:设置<?xml version="1.0" encoding="gb2312" ?>(4)xml文件里Label属性可以有:
            RightIcon  向右的级联菜单图标 ,比如:RightIcon="arrow_white.gif" 
            RightIconWidth 向右级联菜单图标的宽度 比如:RightIconWidth="15"
            ID="i_List"
    (5)要想知道用户是按下哪个选项,可以通过ID的设置,比如:
         XML文件里有:<MenuItem Label="文件" ID="i_File"/>
        那么在:控件的事件,也就是属性窗口中那个黄色的小闪电那个中,找到:MenuItemSelected,设置相关事件:
        private void ASPnetMenu1_MenuItemSelected(object sender, CYBERAKT.WebControls.Navigation.MenuItemSelectedEventArgs e)
    {
    Response.Write(e.ItemID.ToString());
    }
    然后在括号中处理相关事件。
      

  2.   

    using System;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.ComponentModel;namespace GeneralForums.Web.UI.Util
    {
    /// <summary>
    /// 定义Default.aspx页面中登录导航项目。
    /// </summary>
    [DefaultProperty("Text"), 
    ToolboxData("<{0}:NavigatorItem runat=server></{0}:NavigatorItem>")]
    public class NavigatorItem : System.Web.UI.WebControls.WebControl
    {
    private string text;
    private string url;
    private string img; /// <summary>
    /// 初始化 NavigatorItem 类的新实例。
    /// </summary>
    public NavigatorItem()
    {
    this.text = "";
    this.url = "";
    this.img = "";
    }
    /// <summary>
    /// 使用指定的标签文本初始化 NavigatorItem 类的新实例。
    /// </summary>
    /// <param name="text">标签文本。</param>
    public NavigatorItem(string text)
    {
    this.text = text;
    this.url = "";
    this.img = "";
    }
    /// <summary>
    /// 使用指定的标签文本和链接 url 初始化 NavigatorItem 类的新实例。
    /// </summary>
    /// <param name="text">标签文本。</param>
    /// <param name="url">链接 url。</param>
    public NavigatorItem(string text, string url)
    {
    this.text = text;
    this.url = url;
    this.img = "";
    }
    /// <summary>
    /// 获取或者设置导航项目的标签文本。
    /// </summary>
    [Bindable(true), 
    Category("Appearance"), 
    DefaultValue(""),
    Description("导航项目的标签文本。")] 
    public string Text 
    {
    get
    {
    return this.text == null ? "[" + this.ID + "]" : this.text;
    }
    set
    {
    this.text = value;
    }
    }
    /// <summary>
    /// 获取或者设置导航项目的链接 url。图片的大小为 203 × 42 象素。
    /// </summary>
    [Bindable(true), 
    Category("Appearance"), 
    DefaultValue(""),
    Description("项目背景图片的虚拟路径。")] 
    public string BackImageUrl
    {
    get
    {
    return this.img == null ? "" : this.img;
    }
    set
    {
    this.img = value;
    }
    }
    /// <summary>
    /// 获取或者设置导航项目的链接 url。
    /// </summary>
    [Bindable(true), 
    Category("Appearance"), 
    DefaultValue(""),
    Description("导航项目的链接 url。")] 
    public string Url 
    {
    get
    {
    return this.url == null ? "" : this.url;
    }
    set
    {
    this.url = value;
    }
    }
    /// <summary> 
    /// 将此控件呈现给指定的输出参数。
    /// </summary>
    /// <param name="output"> 要写出到的 HTML 编写器 </param>
    protected override void Render(HtmlTextWriter output)
    {
    System.Web.UI.WebControls.Table table = new Table();
    table.ID = this.ID;
    table.ApplyStyle(this.ControlStyle);
    table.BackImageUrl = this.BackImageUrl;
    table.CellPadding = 0;
    table.CellSpacing = 0;
    table.BorderStyle = BorderStyle.None;
    table.BorderWidth = new Unit(0);
    table.Height = new Unit(42);
    table.Width = new Unit(203);
    table.Visible = this.Visible;
    table.Enabled = this.Enabled;

    System.Web.UI.WebControls.TableRow row = new TableRow();
    System.Web.UI.WebControls.TableCell cell = new TableCell();
    cell.VerticalAlign = System.Web.UI.WebControls.VerticalAlign.Middle;
    string cssclass = table.CssClass;
    table.CssClass = "";
    if(cssclass != "")
    cssclass = " class=\"" + cssclass + "\"";
    string key = "";
    string title = "";
    if(this.AccessKey != "")
    {
    key = "accesskey=\"" + this.AccessKey + "\" ";
    title = "(Alt + " + this.AccessKey + ")";
    }
    if(this.ToolTip != "")
    {
    title = this.ToolTip + title;
    }
    if(title != "")
    title = " title=\"" + title + "\"";
    cell.Text = "<div align=\"center\"><a " + key + "href=\"" + this.Url + "\"" + cssclass + title + "\" style=\"text-decoration:none\">" + this.Text + "</a></div>";

    row.Cells.Add(cell);
    table.Rows.Add(row);
    table.RenderControl(output);
    }
    }
    }
      

  3.   

    6楼的师兄,我怎么一用你的代码浏览时就出异常,你能把用法说清楚吗?代码是放在*.ascx的控件代码里还是新建个web控件库生成dll文件再用?恕小弟愚钝,脑子现在很乱,没一点头绪。
      

  4.   

    偶都说了,自己写!CS文件中;编译成DLL,然后通过DLL加载控件。
    另:这CSDN中的楼层不怎么好数吧?回帖时直接说ID指名道姓就OK了。
    你说6楼,我看了好几天都没发现是在说我呢。