轻松实现无刷新三级联动菜单[VS2005与AjaxPro]
生活随笔
收集整理的這篇文章主要介紹了
轻松实现无刷新三级联动菜单[VS2005与AjaxPro]
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近做一些網(wǎng)站程序,經(jīng)常要用到多個(gè)下拉菜單選擇,看了介紹開(kāi)始用AjaxPro這個(gè)控件,感覺(jué)效果不錯(cuò)。以前使用過(guò)MagicAjax,很久不用了忘記了,最麻煩的就是在虛擬目錄的時(shí)候比較麻煩,呵呵,在網(wǎng)上也有很多,不過(guò)重要的地方經(jīng)常沒(méi)提醒新手,俺也是菜鳥(niǎo),高手請(qǐng)忽略。看到這個(gè)AjaxPro使用比較簡(jiǎn)單,這次使用的是6.x的,最新的是7.x的,覺(jué)得6.0系列的方便,就選它了。
在重要的地方都有提示了,相信很容易看懂。
????? 首先在web.config添加這個(gè)接點(diǎn) 在<system.web>與</system.web>之間,如下:
?? <system.web>
??? <!--for Ajaxnet-->
??? <httpHandlers>
????? <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
??? </httpHandlers>
????<!--其他設(shè)置-->
?? </system.web>
???? 然后把AjaxPro.2.dll丟到bin文件夾,然后引用它就可以了。
??? 還是發(fā)代碼吧,麻煩死了下面代碼是 Default.aspx.cs的
using?System;
using?System.Data;
using?System.Configuration;
using?System.Data.OleDb;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;
public?partial?class?_Default?:?System.Web.UI.Page
{???
????
????protected?void?Page_Load(object?sender,?EventArgs?e)
????{
????????AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));?//必要的
????????if(!IsPostBack)BindDc();
????}
????/**////?<summary>
????///?數(shù)據(jù)庫(kù)連接
????///?</summary>
????///?<returns></returns>
????public?OleDbConnection?myConn()
????{
????????string?ConnStr?=?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbpath"]);
????????OleDbConnection?conn?=?new?OleDbConnection(ConnStr);
????????try
????????{
????????????conn.Open();
????????????return?conn;
????????}
????????catch
????????{?
????????????throw;
????????}
????}
????
????/**////?<summary>
????///?獲取下級(jí)分類(lèi)
????///?</summary>
????[AjaxPro.AjaxMethod]
????public?DataSet?getNextClass(string?cid)
????{
????????//因?yàn)椴幌M?yè)面可以知道字段名稱(chēng)?所以?as?txt,id?as?vol?如果是sql?ser?可以用?=?
????????//頁(yè)面獲取的?列名稱(chēng)?必須跟這個(gè)一同樣?而且區(qū)分大小寫(xiě)?一般都是這個(gè)地方容易疏忽了
????????//所以二級(jí)分類(lèi)沒(méi)變化
????????string?sql?=?@"select?cname?as?txt,id?as?vol?from?webclass?where?parentid="?+?cid;
????????try
????????{
????????????return?getDs(sql);
????????}
????????catch
????????{
????????????//throw;
????????????return?null;
????????}
????}
????
????/**////?<summary>
????///?返回一個(gè)DataSet
????///?</summary>
????///?<param?name="SQL"></param>
????///?<returns></returns>
????public?DataSet?getDs(string?SQL)
????{
????????OleDbConnection?conn?=?myConn();
????????DataSet?Ds?=?new?DataSet();
????????OleDbDataAdapter?Da?=?new?OleDbDataAdapter(SQL,?conn);
????????try
????????{???
????????????Da.Fill(Ds);
????????????return?Ds;
????????}
????????catch
????????{
????????????return?null;
????????????//throw;
????????}
????}
????/**////?<summary>
????///?//數(shù)據(jù)綁定
????///?</summary>
????private?void?BindDc()
????{
????????//第一個(gè)
????????string?sql?=?@"select?*?from?webclass?where?Parentid=0";
????????ddl1.DataSource?=?getDs(sql);
????????ddl1.DataTextField?=?"cname";
????????ddl1.DataValueField?=?"id";
????????ddl1.DataBind();
????????if?(ddl1.DataSource?!=?null)?ddl1.Attributes.Add("onchange",?"showNext(this.options[selectedIndex].value,'ddl2');");
???????
????????//可以先判斷?DropDownList.SelectedItem.Value
????????//第二個(gè)
????????sql?=?@"select?*?from?webclass?where?parentid="?+?ddl1.SelectedItem.Value;
????????ddl2.DataSource?=?getDs(sql);
????????ddl2.DataTextField?=?"cname";
????????ddl2.DataValueField?=?"id";
????????ddl2.DataBind();
????????
????????//第三個(gè)
????????if?(ddl2.DataSource?!=?null)?ddl2.Attributes.Add("onchange",?"showNext(this.options[selectedIndex].value,'ddl3');");
????????sql?=?@"select?*?from?webclass?where?parentid="?+?ddl2.SelectedItem.Value;
????????ddl3.DataSource?=?getDs(sql);
????????ddl3.DataTextField?=?"cname";
????????ddl3.DataValueField?=?"id";
????????ddl3.DataBind();
????
????}
}
default.aspx內(nèi)容:
<%@?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">
????<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>
????<title>AjaxPro實(shí)現(xiàn)無(wú)刷新三級(jí)聯(lián)動(dòng)</title>
</head>
<script?language="javascript"?type="text/javascript">
??????<!--
???????//?ACLOUD?常用JS函數(shù)
???????function?getBid(s){
??????????return?document.getElementById(s);
????????}
????????function?getBmc(s){
??????????return?document.getElementByName(s);
????????}
????????
???????//顯示分類(lèi)列表
???????function?showNext(sid,obj)
????????{?
??????????if(sid==null?||?sid==""?||?sid.length<1)return;
??????????var?slt?=getBid(obj);
??????????var?v?=?_Default.getNextClass(sid).value;?//?類(lèi)的名稱(chēng)
??????????//alert(v);
??????????//return;
??????????if?(v?!=?null){??????
??????????if(v?!=?null?&&?typeof(v)?==?"object"?&&?v.Tables?!=?null)
????????????????????{????????
????????????????????????slt.length?=?0;
????????????????????????slt.options.add(new?Option("請(qǐng)選擇",0));
????????????????????????//加了個(gè)“請(qǐng)選擇”主要為了觸發(fā)onchange事件
????????????????????????if(obj=="ddl2"){
????????????????????????getBid("ddl3").options.length=0;
????????????????????????getBid("ddl3").options.add(new?Option("請(qǐng)選擇",0));
????????????????????????}????????????
????????????????????????for(var?i=0;?i<v.Tables[0].Rows.length;?i++)
????????????????{
????????????????????var?txt?=?v.Tables[0].Rows[i].txt;?//這個(gè)地方需要注意區(qū)分大小寫(xiě)
????????????????var?vol?=?v.Tables[0].Rows[i].vol;?//跟dataset表的列名稱(chēng)要一致
????????????????slt.options.add(new?Option(txt,vol));
????????????????}
????????????????????}
???????????}????
???????????return;
????????}
????????-->
</script>
<body>
????<form?id="form1"?runat="server">
????<div>
??????<table?width="500"?border="0"?align="center"?cellpadding="0"?cellspacing="0">
????????<tr>
??????????<td?width="99"> </td>
??????????<td?width="401">
??????????????城市<asp:DropDownList?ID="ddl1"?runat="server">
??????????????</asp:DropDownList>
??????????????區(qū)域<asp:DropDownList?ID="ddl2"?runat="server">
??????????????</asp:DropDownList>
??????????????花園<asp:DropDownList?ID="ddl3"?runat="server">
??????????????</asp:DropDownList></td>
????????</tr>
????????<tr>
??????????<td> </td>
??????????<td> </td>
????????</tr>
????????<tr>
??????????<td> </td>
??????????<td> </td>
????????</tr>
??????</table>
????
????</div>
????</form>
</body>
</html> 相關(guān)文件
http://files.cnblogs.com/asboy/AjaxDropDownlist.rar
在重要的地方都有提示了,相信很容易看懂。
????? 首先在web.config添加這個(gè)接點(diǎn) 在<system.web>與</system.web>之間,如下:
?? <system.web>
??? <!--for Ajaxnet-->
??? <httpHandlers>
????? <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
??? </httpHandlers>
????<!--其他設(shè)置-->
?? </system.web>
???? 然后把AjaxPro.2.dll丟到bin文件夾,然后引用它就可以了。
??? 還是發(fā)代碼吧,麻煩死了下面代碼是 Default.aspx.cs的
using?System;
using?System.Data;
using?System.Configuration;
using?System.Data.OleDb;
using?System.Web;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;
public?partial?class?_Default?:?System.Web.UI.Page
{???
????
????protected?void?Page_Load(object?sender,?EventArgs?e)
????{
????????AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));?//必要的
????????if(!IsPostBack)BindDc();
????}
????/**////?<summary>
????///?數(shù)據(jù)庫(kù)連接
????///?</summary>
????///?<returns></returns>
????public?OleDbConnection?myConn()
????{
????????string?ConnStr?=?"Provider=Microsoft.Jet.OLEDB.4.0;Data?Source="?+?System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbpath"]);
????????OleDbConnection?conn?=?new?OleDbConnection(ConnStr);
????????try
????????{
????????????conn.Open();
????????????return?conn;
????????}
????????catch
????????{?
????????????throw;
????????}
????}
????
????/**////?<summary>
????///?獲取下級(jí)分類(lèi)
????///?</summary>
????[AjaxPro.AjaxMethod]
????public?DataSet?getNextClass(string?cid)
????{
????????//因?yàn)椴幌M?yè)面可以知道字段名稱(chēng)?所以?as?txt,id?as?vol?如果是sql?ser?可以用?=?
????????//頁(yè)面獲取的?列名稱(chēng)?必須跟這個(gè)一同樣?而且區(qū)分大小寫(xiě)?一般都是這個(gè)地方容易疏忽了
????????//所以二級(jí)分類(lèi)沒(méi)變化
????????string?sql?=?@"select?cname?as?txt,id?as?vol?from?webclass?where?parentid="?+?cid;
????????try
????????{
????????????return?getDs(sql);
????????}
????????catch
????????{
????????????//throw;
????????????return?null;
????????}
????}
????
????/**////?<summary>
????///?返回一個(gè)DataSet
????///?</summary>
????///?<param?name="SQL"></param>
????///?<returns></returns>
????public?DataSet?getDs(string?SQL)
????{
????????OleDbConnection?conn?=?myConn();
????????DataSet?Ds?=?new?DataSet();
????????OleDbDataAdapter?Da?=?new?OleDbDataAdapter(SQL,?conn);
????????try
????????{???
????????????Da.Fill(Ds);
????????????return?Ds;
????????}
????????catch
????????{
????????????return?null;
????????????//throw;
????????}
????}
????/**////?<summary>
????///?//數(shù)據(jù)綁定
????///?</summary>
????private?void?BindDc()
????{
????????//第一個(gè)
????????string?sql?=?@"select?*?from?webclass?where?Parentid=0";
????????ddl1.DataSource?=?getDs(sql);
????????ddl1.DataTextField?=?"cname";
????????ddl1.DataValueField?=?"id";
????????ddl1.DataBind();
????????if?(ddl1.DataSource?!=?null)?ddl1.Attributes.Add("onchange",?"showNext(this.options[selectedIndex].value,'ddl2');");
???????
????????//可以先判斷?DropDownList.SelectedItem.Value
????????//第二個(gè)
????????sql?=?@"select?*?from?webclass?where?parentid="?+?ddl1.SelectedItem.Value;
????????ddl2.DataSource?=?getDs(sql);
????????ddl2.DataTextField?=?"cname";
????????ddl2.DataValueField?=?"id";
????????ddl2.DataBind();
????????
????????//第三個(gè)
????????if?(ddl2.DataSource?!=?null)?ddl2.Attributes.Add("onchange",?"showNext(this.options[selectedIndex].value,'ddl3');");
????????sql?=?@"select?*?from?webclass?where?parentid="?+?ddl2.SelectedItem.Value;
????????ddl3.DataSource?=?getDs(sql);
????????ddl3.DataTextField?=?"cname";
????????ddl3.DataValueField?=?"id";
????????ddl3.DataBind();
????
????}
}
default.aspx內(nèi)容:
<%@?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">
????<meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312"?/>
????<title>AjaxPro實(shí)現(xiàn)無(wú)刷新三級(jí)聯(lián)動(dòng)</title>
</head>
<script?language="javascript"?type="text/javascript">
??????<!--
???????//?ACLOUD?常用JS函數(shù)
???????function?getBid(s){
??????????return?document.getElementById(s);
????????}
????????function?getBmc(s){
??????????return?document.getElementByName(s);
????????}
????????
???????//顯示分類(lèi)列表
???????function?showNext(sid,obj)
????????{?
??????????if(sid==null?||?sid==""?||?sid.length<1)return;
??????????var?slt?=getBid(obj);
??????????var?v?=?_Default.getNextClass(sid).value;?//?類(lèi)的名稱(chēng)
??????????//alert(v);
??????????//return;
??????????if?(v?!=?null){??????
??????????if(v?!=?null?&&?typeof(v)?==?"object"?&&?v.Tables?!=?null)
????????????????????{????????
????????????????????????slt.length?=?0;
????????????????????????slt.options.add(new?Option("請(qǐng)選擇",0));
????????????????????????//加了個(gè)“請(qǐng)選擇”主要為了觸發(fā)onchange事件
????????????????????????if(obj=="ddl2"){
????????????????????????getBid("ddl3").options.length=0;
????????????????????????getBid("ddl3").options.add(new?Option("請(qǐng)選擇",0));
????????????????????????}????????????
????????????????????????for(var?i=0;?i<v.Tables[0].Rows.length;?i++)
????????????????{
????????????????????var?txt?=?v.Tables[0].Rows[i].txt;?//這個(gè)地方需要注意區(qū)分大小寫(xiě)
????????????????var?vol?=?v.Tables[0].Rows[i].vol;?//跟dataset表的列名稱(chēng)要一致
????????????????slt.options.add(new?Option(txt,vol));
????????????????}
????????????????????}
???????????}????
???????????return;
????????}
????????-->
</script>
<body>
????<form?id="form1"?runat="server">
????<div>
??????<table?width="500"?border="0"?align="center"?cellpadding="0"?cellspacing="0">
????????<tr>
??????????<td?width="99"> </td>
??????????<td?width="401">
??????????????城市<asp:DropDownList?ID="ddl1"?runat="server">
??????????????</asp:DropDownList>
??????????????區(qū)域<asp:DropDownList?ID="ddl2"?runat="server">
??????????????</asp:DropDownList>
??????????????花園<asp:DropDownList?ID="ddl3"?runat="server">
??????????????</asp:DropDownList></td>
????????</tr>
????????<tr>
??????????<td> </td>
??????????<td> </td>
????????</tr>
????????<tr>
??????????<td> </td>
??????????<td> </td>
????????</tr>
??????</table>
????
????</div>
????</form>
</body>
</html> 相關(guān)文件
http://files.cnblogs.com/asboy/AjaxDropDownlist.rar
轉(zhuǎn)載于:https://www.cnblogs.com/lyfeixue/archive/2007/05/05/736039.html
總結(jié)
以上是生活随笔為你收集整理的轻松实现无刷新三级联动菜单[VS2005与AjaxPro]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pytorch自定义模型执行过程
- 下一篇: 389 find the differe