最近做一个项目,要求实现二级联动效果。背景为:通过学院的选择,联动出专业选项。起初想直接用微软的控件实现Ajax效果,但是DropDownList控件会自动触发PostBack,在后台根本就不好控制,所以抛弃这种方案,用Jquery实现Ajax效果。直接上代码,简单直观。

1.前端页面(这里给出页面二级联动示意,分别为两个select)

<select name="xsxy" id="xsxy">
    <option>-- 请选择学院名称 --</option>
</select>
<select name="xszy" id="xszy">
    <option>-- 请选择专业名称 --</option>
</select> 

2.所对应Jquery代码

$(function () {
        //ajax加载 注意路径,专业的post参数和学院有所不同,注意
        $.post("../../handler/XyZyHandler.ashx", { "action": "getxydata" }, function (data, status) {
            if (status != "success") {
                $("#xsxy").append("<option>加载学院出错</option>");
            }
            else if (data == "nodata") {
                $("#xsxy").append("<option>暂时没有数据</option>");
            }
            else {
                var options = $.parseJSON(data);
                for (var i = 0; i < options.length; i++) {
                    var option = options[i];
                    $("#xsxy").append("<option value='" + option.opvalue + "'>" + option.optext + "</option>"); //注意这里的option写法
                }
            }
        });

        //当学院改变时,实现专业的联动
        $("#xsxy").change(function () {

            $.post("../../handler/XyZyHandler.ashx", { "action": "getzydata", "xyid": $(this).val() }, function (data, status) {

                if (status != "success") {
                    $("#xszy").append("<option>加载专业出错</option>");
                }
                else if (data == "nodata") {
                    $("#xszy").append("<option>暂时没有数据</option>");
                }
                else {
                    $("#xszy").empty();
                    $("#xszy").append("<option>-- 请选择专业名称 --</option>")
                    var options = $.parseJSON(data);
                    for (var i = 0; i < options.length; i++) {
                        var option = options[i];
                        $("#xszy").append("<option value='" + option.opvalue + "'>" + option.optext + "</option>");
                    }

                }

            });

        });

3.其对应的ashx文件

public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string action = context.Request["action"];
            Xyzygl xzgl = new Xyzygl();
            //处理学院
            if (action == "getxydata")
            {
                DataTable result = xzgl.Xyzygl_Getxy();   

                )
                {
                    context.Response.Write("nodata");
                }
                else
                {
                    List<OptionContent> list = new List<OptionContent>();
                    ; i < result.Rows.Count; i++)
                    {
                        string xymc = result.Rows[i]["xymc"].ToString();
                        string xyid = result.Rows[i]["xyid"].ToString();

                        list.Add(new OptionContent() { opvalue = xyid, optext = xymc });

                    }

                    //这里利用json处理更加的灵活,注意在添加数据的时候要以对象的方式,并且以属性的方式表示数据,这样前台在利用数据时就会更简单
                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    context.Response.Write(jss.Serialize(list));

                }
            }
            else if (action == "getzydata")
            {
                string xyid = context.Request["xyid"];
                DataTable result = xzgl.Xyzygl_Getzy(xyid);
                )
                {
                    context.Response.Write("nodata");
                }
                else
                {
                    List<OptionContent> list = new List<OptionContent>();
                    ; i < result.Rows.Count; i++)
                    {
                        string zymc = result.Rows[i]["zymc"].ToString();
                        string zyid = result.Rows[i]["zyid"].ToString();

                        list.Add(new OptionContent() { opvalue = zyid, optext = zymc });

                    }

                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    context.Response.Write(jss.Serialize(list));
                }
            }

        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        public class OptionContent
        {
            public string opvalue { get; set; }
            public string optext { get; set; }
        }
    }

说明:

    1.这里将学院和专业的处理文件写在一个中,通过post的参数进行判断进行相应处理。
    2.将数据结果进行json化,并且将数据结果进行对象的封装,使处理数据时更加的灵活。
    3.对象的创建,直接给出属性,偷了懒,其实可以用参数构建对象,然后给出Set和Get方法。
    4.前台的取值,通过json进行获取,注意看代码。
    5.学院和专业值从数据库中取得,具体细节,这里没有给出,但是读者应该可以了解。
    6.$.post中的参数,最好和ashx对应查看

Asp.Net下,基于Jquery的Ajax二级联动的更多相关文章

  1. 份-城市,基于jQuery的AJAX二级联动,用Struts2整合AJAX【非数据库版】

    package loaderman.provincecity; import java.io.IOException; import java.util.LinkedHashSet; import j ...

  2. 源码来袭!!!基于jquery的ajax分页插件(demo+源码)

    前几天打开自己的博客园主页,无意间发现自己的园龄竟然有4年之久了.可是看自己的博客列表却是空空如也,其实之前也有写过,但是一直没发布(然而好像并没有什么卵用).刚开始学习编程时就接触到博客园,且在博客 ...

  3. 基于jQuery的ajax对WebApi和OData的封装

    基于jQuery的ajax对WebApi和OData的封装 WebApi 的使用带来了一个显著的特点,对type有一定的要求.一般ajax的type无非就是两种,GET和POST.如果用JSONP来跨 ...

  4. asp.net DropDownList无刷新ajax二级联动实现详细过程

    只适合新手制作DropDownList无刷新ajax二级联动效果: 数据库实现,添加两表如图:表1,pingpai,表2,type,具体数据库实现看自己的理解: //页面主要代码: <asp:S ...

  5. Python Django 之 基于JQUERY的AJAX 登录页面

    一.基于Jquery的Ajax的实现 1.url 2.vews 3.templates

  6. 基于JS的ajax的实现,JSON和JSONP,基于JQuery的ajax的实现

    基于JS的ajax的实现,JSON和JSONP,基于JQuery的ajax的实现1.基于JS的ajax的实现 step1: var xmlhttp = XMLHttprequest() #实例化一个对 ...

  7. Json 基于jQuery+JSON的省市联动效果

    helloweba.com 作者:月光光 时间:2012-09-12 21:57 标签: jQuery  JSON  Ajax  省市联动     省市区联动下拉效果在WEB中应用非常广泛,尤其在一些 ...

  8. 在asp.net中使JQuery的Ajax用总结

    自从有了JQuery,Ajax的使用变的越来越方便了,但是使用中还是会或多或少的出现一些让人短时间内痛苦的问题.本文暂时总结一些在使用JQuery Ajax中应该注意的问题,如有不恰当或者不完善的地方 ...

  9. 基于jQuery的ajax系列之用FormData实现页面无刷新上传

    接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方 ...

随机推荐

  1. H5新特性汇总

    H5新特性: 新增选择器 document.querySelector.document.querySelectorAll 拖拽释放(Drag and drop) API 媒体播放的 video 和 ...

  2. PyQt5安装目录中找不到designer.exe与pyrcc5.exe

    我安装的是PyQt5的5.9版本,在安装目录下找不到designer.exe文件.在摸索一段后发现5.9版本对库文件和相关的开发工具是分开发布的.QtDesigner是在pyqt5-tools的包里. ...

  3. POJ3264 (RMQのST解法)

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

  4. hadoop2 YARN/Mv2中 ApplicationMaster相关问题及介绍

    ApplicationMaster是什么? ApplicationMaster是一个框架特殊的库,对于Map-Reduce计算模型而言有它自己的ApplicationMaster实现,对于其他的想要运 ...

  5. 京东首页原生----js制作|css动画|js动画|计时器--轮播图(好久没更新,这两天闲的蛋疼做个京东页面分辨率1366*768,919京东,适应没调!)要文件加关注找我要哦!

  6. 项目实战3—Keepalived 实现高可用

    实现基于Keepalived高可用集群网站架构 环境:随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端 ...

  7. 设计模式的征途—10.装饰(Decorator)模式

    虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情.如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修.对新 ...

  8. 发布npm时遇到的两个小问题,解决方法

    1.出现这个错误 no_perms Private mode enable, only admin can publish this module 错误输出内容 npm ERR! publish Fa ...

  9. Python 面向对象(一) 基础

    Python 中一切皆对象 什么是面向对象? 面向对象就是将一些事物的共有特征抽象成类,从类来创建实例. 类class 可以理解为模版 比如人类,都具有身高.体重.年龄.性别.籍贯...等属性,但属性 ...

  10. Java中常用加减密方式

    1.加密概述: 加密就是是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使以获得了加密的信息,但因不知解密方式,仍无法了解信息的内容.大体上又分为双向加密和单向加密. 2.单项加密 2.1.概 ...