日期:2014-05-18  浏览次数:20394 次

◆勇敢者论坛源代码分析系列(2)—url参数传递
前言:勇敢者论坛是一个开放源码的ASP.NET c#论坛,使用VS.NET 2005开发管理,可以支持两种数据库 SQL2000或Accsee。作者的开发本意,就是提供给大家学习使用的。写本系列代码分析,也是为了初学者更快的入门和进步。祝大家学习愉快!多多指教。 
  勇敢者论坛: 程序演示 源码下载

  上一节讲的是简单的数据查询,这节本来想讨论一下分页查询,不过看看论坛上使用的分页方法中有关url参数传递的使用,就先说说怎么用url传递参数吧。
  以勇敢者论坛(开放源码的ASP.NET论坛) 的 left.aspx(就是左边的树形目录)和BigcalssList.aspx?BID=XXX(大分类列表) 这两个页面为例子,看看是怎么把帖子列表显示出来的,再顺便看看Mainlist.aspx(各个分类的帖子列表),怎么处理多个参数。
  在left.aspx中,我们看到了<uc1:Menus id="Menus1" runat="server"></uc1:Menus>,实际显示树中分类内容的部分都在这个用户控件中,就是Menus.ascx,在这个文件中,我们可以看到一个<%=text%>,其上边的那个table,是一些固定的栏目,这个text,在Menus.ascx.cs代码中,具体的付值,最终拼出了我们所看到的树形结构。

  protected void Page_Load(object sender, System.EventArgs e)
  {
  // 在此处放置用户代码以初始化页面
  text=MenuLoad();
  }

  private string MenuLoad()
  {
  //填充树干的内容
  string trees="",bs="";
  int i=1;
  BT=DBOperate.SelectFormForum("SELECT BigClass_ID, BigClass_Name, Enable FROM Big_Class WHERE (Enable = 1)");
  ST=DBOperate.SelectFormForum("SELECT SmallClass_ID, BigClass_ID, SmallClass_Name, Enable FROM Small_Class WHERE (Enable = 1)");
  DataRow [] drs = BT.Select("");

  foreach( DataRow r in drs )
  {
  trees+="<table border=0 cellpadding=0 cellspacing=0><TR height=2><td></td></tr></table><table width=158 border=0 align='center' cellpadding=0 cellspacing=0 bgcolor=#FFFFFF><TBODY>";
  bs="<A href="+"BigcalssList.aspx?BID="+r["bigclass_ID"].ToString()+" target='mainFrame'>"+r["bigclass_Name"].ToString()+"</A>";
  trees += "<tr><td height=25 background='image/menudown.gif' id='imgmenu" + i + "' style='CURSOR: hand' onclick='showsubmenu(" + i + ")' class='Top11'>&nbsp;&nbsp;<SPAN>" + bs + "</SPAN></td></tr> <tr><td id='submenu" + i + "' style='DISPLAY: none'><DIV align='center'><table width='90%' cellpadding=0 cellspacing=3><TBODY>";
  string parentid=r["bigclass_ID"].ToString();
  trees+=CreateNode(parentid)+"</TBODY></table></DIV></td></tr></TBODY></table>";
  i++;
  }
  return trees;
  } 

  private string CreateNode(string parentid)
  {
  //填充树枝的内容
  string Nodes="";
  DataRow [] drsr = ST.Select("BigClass_ID = "+parentid);
  foreach( DataRow rw in drsr )
  {
  Nodes=Nodes+"<tr><td><font color=#ff0000>·</font><A href="+"Mainlist.aspx"+"?solved=0&BID="+ rw["bigclass_ID"].ToString() +"&SID="+ rw["SmallClass_ID"].ToString()+"&Page=1 target='mainFrame'>"+rw["SmallClass_Name"].ToString()+"</A></td></tr>";
  }  
  return Nodes;
  }

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

  这里,要想更直观的看到结果,不如在运行程序以后,在default2.aspx的左边,也就是树形所在的leftFrame中,找个空地方,鼠标右键-〉查看源文件,在这里可以看到最终的输出结果。

  在上边代码中,可以找到这么一句:bs="<A href="+"BigcalssList.aspx?BID="+r["bigclass_ID"].ToString()+" target='mainFrame'>"+r["bigclass_Name"].ToString()+"</A>";这句,就是为了调用BigcalssList.aspx的后边的?BID=就是要传递的大分类id,r["bigclass_ID"]会根据数据库中不同的数据,给BID提供具体的编号。

  树枝中调用 Nodes=Nodes+"<tr><td