◆勇敢者论坛源代码分析系列(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'> <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><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>"; 拼成调用Mainlist.aspx的地址串。
运行论坛,当鼠标划过树形的大分类,比如大众社区,IE状态栏上会显示.../BigcalssList.aspx?BID=1,小分类上,则显示:.../Mainlist.aspx?solved=0&BID=1&SID=210&Page=1,这里我们可以比较出来,传递参数,无非就是把具体的页面地址后面加上“?参数名1=参数值1“,而多个参数之间只需要用&隔开。
那么如何接收参数呢?打开 BigcalssList.aspx.cs,Request.QueryString["BID"]就是读取传过来的 BID参数的语句。Mainlist.aspx.cs 也一样,Request.QueryString["BID"],Request.QueryString["SID"],Request.QueryString["solved"]等,就是读取参数的语句了,读取以后,按自己的需要进行处理就可以了。
先就说这些把,自己做做测试把。
--------------------------
有什么不明确的,可以提出来讨论。高手和有写作经验的朋友,欢迎指点!
[解决办法]
SF
[解决办法]
mark
[解决办法]
动网的风格呀
[解决办法]
看看,支持
[解决办法]
UP永久支持
[解决办法]
支持
[解决办法]
学习下
[解决办法]
支持
[解决办法]
UP
[解决办法]
帮顶
[解决办法]
支持
[解决办法]
好的
[解决办法]
Up
[解决办法]
顶 ~~ 我下载了 再学呢
[解决办法]
支持!
[解决办法]
支持!
[解决办法]
[解决办法]
欢迎教程
[解决办法]
支持楼主,顶
[解决办法]
支持
[解决办法]
支持
[解决办法]
UP
[解决办法]
学习下
[解决办法]
learn~
[解决办法]
支持
[解决办法]
顶
[解决办法]
顶
[解决办法]
SF
[解决办法]
顶
[解决办法]
SF
[解决办法]
顶
------解决方案--------------------
下载下来,学习了。
[解决办法]
支持
[解决办法]
支持
[解决办法]
顶
[解决办法]
顶
[解决办法]
顶
[解决办法]
支持
[解决办法]
学习中