关于C#制作网页项目,利用数据库生成动态下拉菜单的问题

wwle 2012-11-20 05:35:31
我原来用的是asp (vbscript>

现在我在学习C#,有些问题不明白.

当然如果牵连到数据库,就要学习ado.net,在正加强.

我到vs界面中我有点晕.

我举个例子:

我在做asp 网页的时候,加载动态下拉菜单的时候,我可以这样写

<tr><td></td>
<td align=center valign=middle width=1400>
<!--#include file="mainmenustyle.asp" -->
</td>
<td></td></tr>

mainmenustyle.asp 中就是制作菜单的过程文件,其实就是我把静态的下拉菜单或导航菜单,改装成从数据表中动态提出的数据生成的菜单. 一般导航条只提一级菜单或批定级别菜单栏目名称.
如果是二级下拉菜单,就提出两级菜单栏目,并配合css 加上 js脚本就成了.



到了vs界面中,因为代码与页面分离,动不动就是事件,或者局部刷新,我还不会设计模版(asp 中 我从来不用模版,我都是 <!--#include file=""--> 就达到了我的目的)

我看的书大部分是做一个表单,进行提交等.
现在我关心的是:想让在vs中设计的页面,在我预想的位置出现一个 下拉菜单 或者 导航条 (不是静态的,是要和数据库中提出的数据动态生成的),我该怎么办?

default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._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">
</form>
<table><tr><td>这里需要菜单</td></tr></table>
</body>
</html>


default.aspx.cs

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
}
}

不知道怎么回事,我做asp页面吧,只要能写出代码,我想让程序怎么组装都成.
到了asp.net ,我选学c#,感觉好象被束缚了,在vs界面中不知道怎么组装了.


我现在的目的就是想把以前写的asp 网站,再用c#重新写一遍.

...全文
548 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwle 2012-11-29
  • 打赏
  • 举报
回复
今日结贴,真心谢谢楼上各位的解答,谢谢.
csdnFUCKINGSUCKS 2012-11-24
  • 打赏
  • 举报
回复
引用 14 楼 wwle 的回复:
引用 11 楼 ducker3590 的回复:明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果 Default.aspx XML/HTML code? 12345678910111213141516171819 <%@ Page Language="C#" AutoEventWireup="true" CodeFile=……
这个是可以做到的 里面有模板列 可以根据自己的要求来定义样式 并不是定死的 有时间给你写一个模板列的示例 建议用VS2010+SQL2008 我现在就是这样的组合 之前装了VS2012后来看了下.Net4.5就增加了一些和Metro相关的东西 而且占用资源也比较大 编程基础还是要看一下的 ASP.Net的后台代码还是C#的 更多的是学习他的控件的用法及运行机制 还有一些web方面的相关运用 加个Q吧 方便交流:359091135
  • 打赏
  • 举报
回复
所有的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来找,是走错了地方。
  • 打赏
  • 举报
回复
引用 14 楼 wwle 的回复:
还有个问题 如果类似很酷的下拉菜单(栏目菜单导航) ,那又有什么好的办法呢。 估计这个 menu 的样式是固定的,对不? 能不能 整点想 模板王 那里的jquery 那么酷酷的菜单效果? 我xp 下装了 vs2008 sql2008 ,但是最近要 sql 2000 ,不得已卸载了。 装了双系统 win2003 但是上边 vs2008 sql2oo5,周一 我把他们清理干净,然后整个 vs2008+sql2008 好好琢磨琢磨。 我原来买了本c#编程基础,全部winform 我刚又刚从dd上,买了最便宜的 c# webapplication书准备研究研究。 谢谢
asp.net帮不了你。asp.net根本不是针对客户端的,所以你只能离开asp.net,去学jQuery!
闪耀的瞬间 2012-11-24
  • 打赏
  • 举报
回复
引用 13 楼 wwle 的回复:
引用 10 楼 zhuyu19911016520 的回复:哦,,你是做菜单哦。。。 你去这个地址看看。。 http://blog.csdn.net/zhuyu19911016520/article/details/8194386 对,就是这个意思。 但我想动态在c#中实现。
动态实现就是你的数据是数据库里面获取的。。是可变动的,(是你维护的) 我给你的例子只是写死的。。你自己到后台去获取数据然后按照前台那种写死的格式循环添加到前台不就可以了。。
wwle 2012-11-24
  • 打赏
  • 举报
回复
引用 11 楼 ducker3590 的回复:
明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果 Default.aspx XML/HTML code? 12345678910111213141516171819 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default……
还有个问题 如果类似很酷的下拉菜单(栏目菜单导航) ,那又有什么好的办法呢。 估计这个 menu 的样式是固定的,对不? 能不能 整点想 模板王 那里的jquery 那么酷酷的菜单效果? 我xp 下装了 vs2008 sql2008 ,但是最近要 sql 2000 ,不得已卸载了。 装了双系统 win2003 但是上边 vs2008 sql2oo5,周一 我把他们清理干净,然后整个 vs2008+sql2008 好好琢磨琢磨。 我原来买了本c#编程基础,全部winform 我刚又刚从dd上,买了最便宜的 c# webapplication书准备研究研究。 谢谢
wwle 2012-11-24
  • 打赏
  • 举报
回复
引用 10 楼 zhuyu19911016520 的回复:
哦,,你是做菜单哦。。。 你去这个地址看看。。 http://blog.csdn.net/zhuyu19911016520/article/details/8194386
对,就是这个意思。 但我想动态在c#中实现。
wwle 2012-11-24
  • 打赏
  • 举报
回复
引用 11 楼 ducker3590 的回复:
明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果 Default.aspx XML/HTML code? 12345678910111213141516171819 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default……
太谢谢你了,我遇到亲人啦,哇哈哈。
csdnFUCKINGSUCKS 2012-11-22
  • 打赏
  • 举报
回复
明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果


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;
}

}
}
}
}
闪耀的瞬间 2012-11-22
  • 打赏
  • 举报
回复
忘记贴地址了, 使用控件 <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了。不知道是不是你想要的。
闪耀的瞬间 2012-11-22
  • 打赏
  • 举报
回复
哦,,你是做菜单哦。。。 你去这个地址看看。。 http://blog.csdn.net/zhuyu19911016520/article/details/8194386
学城 2012-11-22
  • 打赏
  • 举报
回复
使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList> 在后台代码 page_Load()中,使用ADO 进行数据库查询 ,设置控件数据源 如 ddlTest.DataSource= 你的数据表(DataTable) ,设置显示名称和值 ddlTest.DataTextField = "Name"; //设置下拉菜单的值的数据源字段 ddlTest.DataValueField = "Value";
wwle 2012-11-22
  • 打赏
  • 举报
回复
引用 6 楼 zhuyu19911016520 的回复:
忘记贴地址了, 使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList> 绑定DataSet string sql = "select * from T_labelinfo"; //查询数据库中要绑定的数据 DataSet ds = this.Data……
但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单. 主页|产品|招聘|联系我们 产品有二级菜单. 菜单表的结枸如下 menuid,menupid,menucaption,menutitle ,menudetail
wwle 2012-11-22
  • 打赏
  • 举报
回复
引用 5 楼 xuecheng_520 的回复:
使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList> 在后台代码 page_Load()中,使用ADO 进行数据库查询 ,设置控件数据源 如 ddlTest.DataSource= 你的数据表(DataTable) ,设置显示名称和值 ddlTest.DataTextField =……
但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单. 主页|产品|招聘|联系我们 产品有二级菜单. 菜单表的结枸如下 menuid,menupid,menucaption,menutitle ,menudetail
wwle 2012-11-22
  • 打赏
  • 举报
回复
引用 3 楼 ducker3590 的回复:
可能没有很明白楼主的想法 其实在Asp.Net里面 比如你需要一个下拉菜单或者导航 是不需要自己去动手也一个页面或者别的什么 因为已经做成控件的方式 方便开发人员使用 只要向你的页面中拖放 然后编辑需要的代码就可以了 根据楼主的问题 写了如下例子 希望对楼主有所帮助 Default.aspx XML/HTML code? 1234567891011121314151……
感谢回答 但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单. 主页|产品|招聘|联系我们 产品有二级菜单. 菜单表的结枸如下 menuid,menupid,menucaption,menutitle ,menudetail
Sliphades 2012-11-22
  • 打赏
  • 举报
回复
形如 http://users.tpg.com.au/j_birch/plugins/superfish/# Example 下面那种样子的吗? 例子是静态的,要动态的也简单。 把你的的树形栏目 数据后台构成成 <ul>... <li>...并按照Example 的CSS样式谁定好,形成完整的 字符串,传递到你的前台控件, 使用jquery 调用例子中的函数就行了。 另外一做法,相对简单,使用 asp.net 原生组件 Menu,例子网上一堆~
csdnFUCKINGSUCKS 2012-11-21
  • 打赏
  • 举报
回复
可能没有很明白楼主的想法 其实在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;
        }
    }
}
wwle 2012-11-21
  • 打赏
  • 举报
回复
引用 1 楼 zhuyu19911016520 的回复:
去这个地址看看吧,希望能对你有所帮助 数据能够后台生成。。
这个地址,不是指你的空间吧? 还是你回匆忙,忘贴地址了。
闪耀的瞬间 2012-11-21
  • 打赏
  • 举报
回复
去这个地址看看吧,希望能对你有所帮助 数据能够后台生成。。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧