最近做一个项目,要求实现二级联动效果。背景为:通过学院的选择,联动出专业选项。起初想直接用微软的控件实现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. Python CRM项目二

    一.准备工作 如果没有配置基本的项目,请参考 http://www.cnblogs.com/luhuajun/p/7771196.html 当我们配置完成后首先准备我们的app 创建2个app分别对应 ...

  2. Linux系统安装_Centos6.9

    第1章 虚拟机安装  1.1 镜像下载 1.1.1 新版本下载 http://mirrors.aliyun.com  #阿里云官方镜像站点 1.1.2 旧版本下载 http://vault.cento ...

  3. 高性能 AJAX

    请求数据的常用的五种方式 1.XMLHttpRequest (XHR) var url = '/data.php'; var params = [     'id=934875',     'limi ...

  4. 百度Echarts导入

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. [C#]使用Costura.Fody将源DLL合并到目标EXE

    本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...

  6. Wordpress上传文件 “无法建立目录wp-content/uploads/2018/25。有没有上级目录的写权限?”

    可能的原因有两个: wp-content/uploads 文件夹权限所限制 解决方法:修改wp-content/uploads 文件夹权限,可以借助ftp等工具: wp_options表中upload ...

  7. 《项目架构那点儿事》——浅析web层struts2的构建

    [前言]所谓快速开发,实质上为了节省项目的开支成本,减少程序员的开发时 间,固然就形成了种种二次封装的框架,也就是造轮子,然后我们的程序就按照这个轮子去画瓢,这里我就把公司这几次开发系统的框架源码贴出 ...

  8. 解决ajax的parsererror错误的终极办法(后台传给前台的数据json问题)

    解决ajax的parsererror错误的终极办法(后台传给前台的数据json问题) 出现这个问题的原因是因为后台传给前台的数据出现了问题,ajax对于json的格式特别的严格 下面是会出现这个问题的 ...

  9. java环境变量和tomcat环境变量配置

    一.JAVA环境变量的配置1.首先下载JDK JDK可以在Oracle(甲骨文)公司的官方网站http://www.oracle.com下载2.安装完成后查看JDK安装路径一般是C:\Program ...

  10. java操作solr实现查询功能

    一.封装的查询方法 /** * solr查询方法 * @param client solr客户端 * @param query solr查询对象 * @return list集合 * @throws ...