asp.net中调用数据库+ajax=实现无刷新二级联动菜单

页面代码:

<head runat="server">
    <title>无刷新二级联动菜单</title> 
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="DropDownList1" runat="server" DataTextField="province" DataValueField="id">
        </asp:DropDownList>
        <asp:DropDownList ID="DropDownList2" runat="server">
        </asp:DropDownList>
    </div>
    </form>
</body>
<script language="javascript" type="text/javascript">
document.body.οnlοad=function()
{
   document.getElementById("DropDownList2").options[0]=new Option("请先选择省份","");
}
    function send_request()
    {
          //XmlHttpRequest并不是一个标准的产物,而是微软最初提出并得到很多浏览器支持的对象,因此其创建方法也是因浏览器而异的
          //创建XmlHttpRequest对象
          http_request=false;
          if(window.XmlHttpRequest)
          {
                 //非IE浏览器
                 http_request=new XMLHttpRequest();
          }
          else if(window.ActiveXObject)
          {
                 //微软IE浏览器
                 try
                 {
                       //较新版本的IE浏览器
                       http_request=new ActiveXObject("Msxml2.XMLHTTP");
                 }
                 catch(e)
                 {
                       try
                       {
                         http_request=new ActiveXObject("Mircosoft.XMLHTTP");
                       }
                       catch(e)
                       {}
                 }
          }
          else
          {
                window.alert("你的浏览器版本已经严重过时,请升级后早做操作!");
                return false;
          }
          //readyState属性表示XMLHTTP的请求的当前状态,它等于4时表示请求已完成。
          //onreadystatechange表示XMLHttpRequest对象中readyState改变时触发这个事件。         
          http_request.onreadystatechange=Getcity;
          //创建htpp请求
          //open方法表示打开一个URL连接
          http_request.open("get","GetCity.ashx?ProvinceType="+document.getElementById('DropDownList1').value,true); 
          //发送上面创建的http请求
          http_request.send(null);
    }
    function Getcity()
    {
        if(http_request.readyState==4)//请求完成,发送成功
        {
            //status属性表示HTTP请求的返回状态码,因为XMLHTTP也是请求的一个网页,所以它的含义和传统网页相同,如:200表示正常返回;404表示找不到网页;500表示服务器内部错误。
            if(http_request.status==200)//交易成功
            {
                //在请求正常完成后,responseText表示以文本形式返回请求页面的内容
                 if(http_request.responseText!="")
                 {
                     //new Array(7),可以把7改成一个尽可能大的值,不如说选项中最大的值
                     var myarr=new Array(7);
                     var ResponseText=http_request.responseText;
                     var pos=ResponseText.indexOf(";");
                     var i=0;
                     while(pos!=-1)
                     {
                       var myText=ResponseText.substring(0,pos);
                       if(myText!="")
                       {
                           myarr[i]=myText;
                           i++;       
                       }
                       ResponseText=ResponseText.substr(pos+1);
                       pos=ResponseText.indexOf(";");
                       continue;
                     }
                     for(var n=0;n<i;n++)
                     document.getElementById("DropDownList2").options[n]=new Option(myarr[n],"");
                     document.getElementById("DropDownList2").length=i;
                 }
                 else
                 {
                     document.getElementById("DropDownList2").options[0]=new Option("请先选择省份","");
                     document.getElementById("DropDownList2").length=1;
                 }           
            }
        }
    }
</script>   
</html>

move.aspx.cs代码:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
            SqlDataAdapter sda1 = new SqlDataAdapter("select * from province", sqlconn);
            DataSet myds1 = new DataSet();
            sda1.Fill(myds1);
            this.DropDownList1.DataSource = myds1.Tables[0];
            this.DropDownList1.DataBind();         this.DropDownList1.Attributes.Add("onchange", "send_request()");
        }
    }

GetCity.ashx代码:
public class GetCity : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string CityResult = "";
        string type = context.Request.QueryString["ProvinceType"].ToString();
        SqlConnection sqlconn = new SqlConnection(ConfigurationManager.AppSettings["ConnStr"].ToString());
        sqlconn.Open();
        SqlCommand comm=new SqlCommand("select county from county where type="+type,sqlconn);
        SqlDataReader reader = comm.ExecuteReader();
        while(reader.Read())
        {
            CityResult += reader[0]+";";
        }
        context.Response.Write(CityResult);
        reader.Close();
    }

    public bool IsReusable {
        get {
            return false;
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现二级(多级)联动的方法一般有两种,一种是通过页面刷新实现,另一种是通过Ajax实现。下面我将介绍一种基于Ajax实现方法。 首先,在前端页面建立两个下拉框,第一个下拉框用于选择省份,第二个下拉框用于选择城市。当选择省份后,第二个下拉框应该只显示该省份下的城市列表。 在后端,我们需要编写一个Web服务,用于获取城市列表。该Web服务应该接收省份名称作为参数,并返回该省份下的城市列表。在Asp.Net,我们可以使用WebMethod来实现该功能。 然后,在前端页面,我们需要使用Ajax调用该Web服务,并将返回的城市列表显示在第二个下拉框。具体实现方法如下: ```javascript // 定义一个函数,用于获取城市列表 function getCityList(province) { $.ajax({ type: "POST", url: "CityService.asmx/GetCityList", data: "{'province':'" + province + "'}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (response) { // 将返回的城市列表显示在第二个下拉框 var cityList = response.d; var citySelect = $("#citySelect"); citySelect.empty(); for (var i = 0; i < cityList.length; i++) { var cityOption = "<option value='" + cityList[i] + "'>" + cityList[i] + "</option>"; citySelect.append(cityOption); } }, error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } }); } // 当选择省份时,调用getCityList函数获取城市列表 $("#provinceSelect").change(function () { var province = $(this).val(); getCityList(province); }); ``` 需要注意的是,getCityList函数的url应该指向我们编写的Web服务的地址。另外,我们还需要在Web.config文件配置一些内容,具体可以参考相关文档。 这样,我们就实现了基于Ajax的二级(多级)联动功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值