服务端控件DropDownList无刷新级联 .

 1.两联级:当下拉列表选择一个后,另一个下拉列表就会无刷新加载数据

2.在HTML中添加两个DropDownList 具体如下

<asp:DropDownList ID="ddlCa" runat="server" Height="20px" Width="100px" CssClass="ddlist">
   <asp:ListItem>--请选择大类--</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="ddlSca" runat="server" Height="20px" Width="100px" CssClass="ddlist">
     <asp:ListItem>--请选择小类--</asp:ListItem>
 </asp:DropDownList>

3.在页面Page_Load的时候给ID="ddlCa"和ID="ddlSca"添加两个属性

if (!IsPostBack)
            {
          
                ddlCa.Attributes.Add("onchange", "addSca()");
                ddlSca.Attributes.Add("onchange","getSca()");
            }

addSca()向ID="ddlSca"中添加数据 ,getSca()读取ID="ddlSca"的当前值

4.在html页面的<head></head>中写脚本语句,我是用的JQuery的AJAX方法,读取的Json格式文件

<script type="text/javascript">
        function addSca() {

            var caName = $("#" + "<%=ddlCa.ClientID %>").val();
            $("#" + "<%=ddlSca.ClientID %>").empty();
            $.get("getSca.ashx", { "caName": caName }, function (data, status) {
                if (status != "success") {
                    alert("错误");
                    return false;
                }
                var scategorys = $.parseJSON(data);
                var defaultOption = $("<option value='--请选择小类--'>--请选择小类--</option>");
                $("#" + "<%=ddlSca.ClientID %>").append(defaultOption);
                for (var i = 0; i < scategorys.length; i++) {
                    var scategory = scategorys[i];
                    var option = $("<option value='" + scategory.Id + "'>" + scategory.Name + "</option>");
                    $("#" + "<%=ddlSca.ClientID %>").append(option);

                }
            });


        }
        function getSca() {
            var scaId = $("#" + "<%=ddlSca.ClientID %>").val();
            $("#" + "<%=hiddSca.ClientID %>").val(scaId);
        }
    </script>


 

5..默认情况下是无法取得ddlSca中当前选中的值,所以需要通过添加一个隐藏控件,把ddlSca中选择的值赋给隐藏控件,最后后台cs代码通过隐藏控件的Value属性间接地获得ddlSca的值。
隐藏控件如下:

01.<asp:HiddenField ID="hiddSca" runat="server" />

 

 

6.通过一般处理程序向后台去数据 getSca.ashx.cs内容如下:
public class getSca : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string caName = context.Request["caName"].ToString();
            ScategoryManager sm = new ScategoryManager();
            var dt = sm.SelectScaByCaName(caName);
            List<Scategory> list = new List<Scategory>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                list.Add(new Scategory() { Name = dt.Rows[i]["name"].ToString(), Id = Convert.ToInt32(dt.Rows[i]["id"]) });
            }
        context.Response.Write(JsonConvert.SerializeObject(list));
            
            
           
        }

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

            public string Name { get; set; }
            public int Id { get; set; }
        }
    }


补充:

我用的.net2.0,所以通过Json.net来序列化数据的,很简单,只要添加引用Newtonsoft.Json.dll  命名空间添加using Newtonsoft.Json,然后调用JsonConvert.SerializeObject()序列化数据 即可

本人刚刚接触这些,所以有很多不足,我是参考别人的和自己的一些想法写的,希望大家提意见!!

参考:http://blog.csdn.net/tianxingzhe37/article/details/6025906

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值