使用UserControl做网站导航条的思路 分析

  网址其实就是目录文件的影射。因此只要拆分URL,并且根据URL的层级关系进行循环,就可以得到当前导航文件的目录。

  1、建立数据库表:Navigate

  

列名 数据类型 说明
id int
parentId int 父ID
root int 层级,0代表根目录,最顶层
pathName varchar(50) (URL)路径名称
navName varchar(50) (栏目)导航名称

  2、建立用户控件 navigate.ascx

  -----------------------------------------------------------

  <%@ Control Language="C#" AutoEventWireup="true" CodeFile="Navigate.ascx.cs" Inherits="UC_Navigate" %>

  <div style="display:block;margin-top:5px;margin-left:3px;margin-bottom:5px;">

  您当前的位置:<a href="/index.aspx">首页</a>

  >>

  <asp:Label ID="lblNavigate" runat="server"></asp:Label>

  <asp:Label ID="lblTitle" runat="server"></asp:Label>

  </div>

  3、用户控件的CS后台文件 navigate.ascx.cs

  -----------------------------------------------------------

  using System;

  using System.Collections;

  using System.ComponentModel;

  using System.Data;

  using System.Data.SqlClient;

  using System.Configuration;

  using System.Web;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  using System.Web.UI.HtmlControls;

  using Bai51.Data;

  public partial class UC_Navigate : System.Web.UI.UserControl

  {

  private string localUrl="http://localhost:8085";

  private string title;

  private DataSet ds;

  private DataTable dt;

  protected void Page_Load(object sender, EventArgs e)

  {

  #region -- 获取导航信息表内容(缓存) --

  ds=(DataSet)Cache["dsNavigateCache"];

  if(ds==null)

  {

  ds=SqlComd.CreateSqlDataSet("select * from navigate","dsNavigate");

  Cache.Insert("dsNavigateCache",ds,null,System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromHours(24));

  }

  dt=ds.Tables[0];

  #endregion

  #region -- 生成导航信息 --

  //分割当前URL地址

  string[] webUrl = System.Web.HttpContext.Current.Request.Path.Split(new char[] { '/' });

  int len = webUrl.Length - 1;

  //层级循环

  string strUrl = localUrl + "/";

  string strNavigate = "";

  string parenId = "0";

  for (int i = 1; i < len; i++)

  {

  string sql = "root=" + Convert.ToString(i-1) + " and pathName='" + webUrl[i] + "' and parentId=" + parenId;

  DataRow[] rows = dt.Select(sql);

  //循环连接地址

  strUrl += (webUrl[i] + "/");

  strNavigate += "<a href='" + strUrl + "'>" + rows[0]["navName"].ToString() + "</a>" + " >> ";

  //保存父ID

  parenId = rows[0]["Id"].ToString();

  }

  #endregion

  lblNavigate.Text=strNavigate;

  lblTitle.Text=title ;

  }

  #region --控件属性 --

  public string LocalUrl

  {

  get{return  localUrl;}

  set{ localUrl=value ;}

  }

  public string Title

  {

  get { return title; }

  set { title = value; }

  }

  #endregion

  }

  4、使用方法

  -----------------------------------------------------------

  在页面中拖入 Navigate.ascx 用户控件,命名为"navBar"。

  在后台代码中写入当前文件的导航名称即可。

  navBar.Title = "本页面是XX栏目";