本帖最后由 wwle 于 2012-11-20 17:39:33 编辑

解决方案 »

  1.   

    可能没有很明白楼主的想法 其实在Asp.Net里面 比如你需要一个下拉菜单或者导航 是不需要自己去动手也一个页面或者别的什么 因为已经做成控件的方式 方便开发人员使用 只要向你的页面中拖放 然后编辑需要的代码就可以了 根据楼主的问题 写了如下例子  希望对楼主有所帮助Default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <%--这里需要添加一个下拉菜单的控件--%>
            <asp:DropDownList ID="ddlTest" runat="server">
            </asp:DropDownList>
            <%-- 这是生成页面的源码
             <select name="ddlTest" id="ddlTest">
    <option value="0">选择项一</option>
    <option value="1">选择项二</option>
    <option value="2">选择项三</option>
            --%>
        </div>
        </form>
    </body>
    </html>
    Default.aspx.cs(也就是所说的后台代码)using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //判断是否是第一次请求页面
            if (!IsPostBack)
            {
                BindDate();
            }
        }
        //绑定数据
        void BindDate()
        {
            //初始化测试数据
            //当然 这里的数据一般来说都是从数据库读取 然后通过封装后获取的
            List<Selection> list = new List<Selection>();
            list.Add(new Selection("选择项一", 0));
            list.Add(new Selection("选择项二", 1));
            list.Add(new Selection("选择项三", 2));        //设置下拉菜单的数据源
            this.ddlTest.DataSource = list;
            //设置下拉菜单的显示内容的数据源字段
            this.ddlTest.DataTextField = "Name";
            //设置下拉菜单的值的数据源字段
            this.ddlTest.DataValueField = "Value";
            //绑定数据源
            this.ddlTest.DataBind();
        }    /// <summary>
        /// 选择项类
        /// </summary>
        public class Selection
        {
            //显示的选项名称
            public string Name { get; set; }
            //选项值
            public int Value { get; set; }
            //默认构造
            public Selection()
            {        }
            //扩展构造
            public Selection(string name, int value)
            {
                this.Name = name;
                this.Value = value;
            }
        }
    }
      

  2.   

    形如
    http://users.tpg.com.au/j_birch/plugins/superfish/#
    Example 下面那种样子的吗?
    例子是静态的,要动态的也简单。
    把你的的树形栏目 数据后台构成成 <ul>... <li>...并按照Example 的CSS样式谁定好,形成完整的
    字符串,传递到你的前台控件, 使用jquery 调用例子中的函数就行了。另外一做法,相对简单,使用 asp.net 原生组件 Menu,例子网上一堆~
      

  3.   

    使用控件 <asp:DropDownList ID="ddlTest" runat="server">         </asp:DropDownList>在后台代码 page_Load()中,使用ADO 进行数据库查询 ,设置控件数据源
    如 ddlTest.DataSource= 你的数据表(DataTable) ,设置显示名称和值
     ddlTest.DataTextField = "Name";         //设置下拉菜单的值的数据源字段           ddlTest.DataValueField = "Value"; 
      

  4.   

    忘记贴地址了,
    使用控件 <asp:DropDownList ID="ddlTest" runat="server">         </asp:DropDownList>
    绑定DataSet   
            string sql = "select * from T_labelinfo"; //查询数据库中要绑定的数据
            DataSet ds = this.DataManager.Fill(sql);//这个是一个查询方法,你不用管
            if (ds.Tables.Count > 0)//判断你是否查询到数据
            {
                ddlTest.DataSource = ds;//下拉控件绑定数据源
                ddlTest.DataValueField = "labelID";//下拉控件的值是lableID这个字段的值
                ddlTest.DataTextField = "constructionname";//下拉控件的文本是这个字段的值
                ddlTest.DataBind();//绑定
            }
    这就OK了。不知道是不是你想要的。
      

  5.   


    感谢回答但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们
       产品有二级菜单.菜单表的结枸如下
    menuid,menupid,menucaption,menutitle ,menudetail
      

  6.   


    但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们
       产品有二级菜单.菜单表的结枸如下
    menuid,menupid,menucaption,menutitle ,menudetail
      

  7.   

    但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们
       产品有二级菜单.菜单表的结枸如下
    menuid,menupid,menucaption,menutitle ,menudetail
      

  8.   

    哦,,你是做菜单哦
    你去这个地址看看。。
    http://blog.csdn.net/zhuyu19911016520/article/details/8194386
      

  9.   

    明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果
    Default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <%-- 页面添加一个菜单控件 --%>
        <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal">
        </asp:Menu>
        </div>
        </form>
    </body>
    </html>
    Default.aspx.cs(注释可能不够详细 如果楼主不明白意思可以在其中任一处加断点后调试 观察变量值 这样会有助于理解)using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using TestDAL;
    using System.Data;public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //判断是否是第一次请求页面
            if (!IsPostBack)
            {
                BindMenu(Menu1, null, "0");
            }
        }    /// <summary>
        /// 绑定菜单(递归方法)
        /// </summary>
        /// <param name="mn">要绑定的菜单</param>
        /// <param name="menu">菜单项</param>
        /// <param name="mainMenu">菜单层级</param>
        static void BindMenu(Menu mn , MenuItem menu , string mainMenu)
        {
            MenuItem mitem = null;
            //获取所有的菜单列表
            DataSet ds = TestService.GetMenus();
            DataTable dt = ds.Tables[0];
            //筛选 父级菜单为指定菜单级别的集合
            DataRow[] drows = dt.Select("MenuPid='" + mainMenu + "'");
            foreach (DataRow dr in drows)
            {
                mitem = new MenuItem();
                mitem.Text = dr["MenuName"].ToString();
                mitem.Value = dr["MenuId"].ToString();
                //当菜单项为空时 表示为顶级菜单
                if (menu == null)
                {
                    //故添加至菜单
                    mn.Items.Add(mitem);
                }
                else //若不是 则为子菜单项
                {
                    //添加至上级菜单的子项集合中
                    menu.ChildItems.Add(mitem);
                }
                //筛选 父级菜单为当前菜单项时
                DataRow[] drs = dt.Select("MenuPid='" + mitem.Value + "'");
                mainMenu = mitem.Value;
                BindMenu(mn, mitem, mainMenu);
            }
        }
    }
    数据访问层数据库中的数据using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;namespace TestDAL
    {
        /// <summary>
        /// Author:Echo
        /// Time:2012/11/22 22:53:08
        /// CLRVersion:4.0.30319.296
        /// GUID:6f05e5cc-99ff-4dcc-907a-ca39815fc7dc
        /// </summary>
        public class TestService
        {
            /// <summary>
            /// 获取所有的菜单项
            /// </summary>
            /// 表结构
            /// ---------------------
            /// MenuId Int
            /// MenuName Nvarchar(50)
            /// MenuPid Int 
            /// ---------------------
            /// <returns></returns>
            public static DataSet GetMenus()
            {
                DataSet ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter();
                using (SqlConnection con = DBHelper.Connection)
                {
                    string sql = "SELECT * FROM Test";
                    SqlCommand cmd = new SqlCommand(sql, con);
                    da.SelectCommand = cmd;
                    try
                    {
                        da.Fill(ds, "menus");
                        return ds;
                    }
                    catch (Exception ex)
                    {
                        
                        throw ex;
                    }
                    
                }
            }
        }
    }
      

  10.   


    还有个问题 如果类似很酷的下拉菜单(栏目菜单导航) ,那又有什么好的办法呢。估计这个 menu 的样式是固定的,对不?能不能 整点想 模板王 那里的jquery 那么酷酷的菜单效果?我xp 下装了 vs2008  sql2008  ,但是最近要 sql 2000  ,不得已卸载了。装了双系统 win2003 但是上边 vs2008 sql2oo5,周一 我把他们清理干净,然后整个 vs2008+sql2008 好好琢磨琢磨。我原来买了本c#编程基础,全部winform 
    我刚又刚从dd上,买了最便宜的 c# webapplication书准备研究研究。谢谢
      

  11.   


    这个是可以做到的 里面有模板列 可以根据自己的要求来定义样式 并不是定死的 有时间给你写一个模板列的示例
    建议用VS2010+SQL2008 我现在就是这样的组合 之前装了VS2012后来看了下.Net4.5就增加了一些和Metro相关的东西 而且占用资源也比较大
    编程基础还是要看一下的 ASP.Net的后台代码还是C#的 更多的是学习他的控件的用法及运行机制 还有一些web方面的相关运用 加个Q吧 方便交流:359091135
      

  12.   

    asp.net帮不了你。asp.net根本不是针对客户端的,所以你只能离开asp.net,去学jQuery!
      

  13.   

    所有的asp.net(稍微)丰富功能的控件,都是很多年前(在1995~2005年前)的理念,都没有想到将来ajax会真正流行。而ajax流行时,asp.net项目组怎么应对?它停止了悲催的asp.net ajax toolkit的开发,在asp.net产品里边扔了一个jQuery的javascript文件,也就是说让开发人员自己去做jQuery插件,它已经不再涉及基于浏览器端的富客户端编程技术了。asp.net最近6、7年知识搞点莫名其妙的服务器端html代码生成,而并没有发明出新的任何一种比GridView之类更强大、并且有ajax交互特点的控件。假设你需要学现代的web客户端编程技术,跑到asp.net来找,是走错了地方。