异步绑定下拉框

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

开发工具与关键技术:Adobe JavaScript

作者:陈钰桃

撰写时间:2020年9月17日

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

成果图(只有选择了上一个模态框,下面的模态框才会显示内容)

异步绑定下拉框 异步绑定下拉框

异步绑定下拉框

案例:

一、页面代码

1、HTML部分代码

<div class="form-group row">

     <label for="academeID" class="col-3 col-form-label">所属学院:</label>

     <div class="col-9">

          <select class="form-control" id="academeID" οnchange="bindFormSpecialtyAndClass()">

               <option value="0">----请选择----</option>

          </select>

        </div>

     </div>

     <div class="form-group row">

         <label for="specialtyID" class="col-3 col-form-label">所属专业:</label>

         <div class="col-9">

             <select class="form-control" id="specialtyID">

                   <option value="0">----请选择----</option>

            </select>

         </div>

     </div>

     <div class="form-group row">

         <label for="gradeID" class="col-3 col-form-label">所属年级:</label>

         <div class="col-9">

               <select class="form-control" id="gradeID">

                     <option value="0">----请选择----</option>

               </select>

            </div>

       </div>

2、script 代码

//下拉框部分

//学院的下拉框    (根据学院查询属下的年级班级)

//----------------方法二-----------------

//下拉框元素的Id(可以是多个)、下拉框数据的Url、参数、下拉框默认值

//createSelect(selectIds, url, params, defaultValue)  -- 为空的数据可以不填

createSelect(['academeID'], "@Url.Content("~/BaseInfoManage/Class/SelectAcademeForSelect")");

 

//-----------方法一-------------

//不需要参数

$.post("@Url.Content("~/BaseInfoManage/Class/SelectAcademeForSelect")",

//回调

      function (jsonObj) {

         for (var i = 0; i < jsonObj.length; i++) {

              JQuery写法 可以直接支持HTML代码注入     下拉框数据

            //不能直接使用 academeID    执行了数据,发送了请求   但是没有出现下拉框(报错)

            //新增模态框

            $("#academeID").append('<option value="' + jsonObj[i].academeID + '">' + jsonObj[i].academeName + '</option>');

            }

        });

  });

使用异步请求绑定下拉框

//当学院下拉框发生改变的时候  年级、班级下拉框的变化

function bindFormSpecialtyAndClass () {

    var academeID = $("#academeID").val();

   //根据学院查询专业

   //--------------方法二-----------------

   createSelect("specialtyID ", "@Url.Content("~/BaseInfoManage/Class/SelectSpecialtyForSelect")", { academeID: academeID });

 

 //-------------方法一----------------

 //在查询之前清空数据(点击学院信息后,更改学院信息时,清空数据)

 //JQuery的empty()   清除数据

 //清空数据影响太大了,导致"----请选择----"页面选择开头模板消失

   $("#specialtyID").empty();

 //添加页面选择开头模板"----请选择----"

   $("#specialtyID").append('<option value="0">----请选择----</option>');

//出现500错误 ,常见的500错误,一般是因为没有传参数

//academeID :是Json格式,直接传变量,后面无法处理  无法处理的数据会被扔掉,所以出现没有传参的数据错误

  $.post("@Url.Content("~/BaseInfoManage/Class/SelectSpecialtyForSelect")", { academeID: academeID }, function (jsonObj) {

     for (var i = 0; i < jsonObj.length; i++) {

     $("#specialtyID").append('<option value="' + jsonObj[i].specialtyID + '">' + jsonObj[i].specialtyName + '</option>');

}

});

 

//根据学院查询年级

//--------------方法二-----------------

createSelect("gradeID", "@Url.Content("~/BaseInfoManage/Class/SelectGradeForSelect")", { academeID: academeID });

 

//-------------方法一----------------

//在查询之前清空数据(点击学院信息后,更改学院信息时,清空数据)

//清空数据影响太大了,导致"----请选择----"页面选择开头模板消失

$("#gradeID ").empty();

//添加页面选择开头模板"----请选择----"

$("#gradeID").append('<option value="0">----请选择----</option>');

$.post("@Url.Content("~/BaseInfoManage/Class/SelectGradeForSelect")", { academeID: academeID }, function (jsonObj) {

     for (var i = 0; i < jsonObj.length; i++) {

     $("#gradeID").append('<option value="' + jsonObj[i].gradeID + '">' + jsonObj[i].gradeName + '</option>');

        }

    });

 }

 

//---------------------方法二------------------------

//根据参数将共通的代码/数据 提取成方法  后面共通调用   (封装方法)

//抽取方法

//创建下拉框

//下拉框元素的Id(多个)、下拉框数据的Url、参数、下拉框默认值

//需要的参数 selectIds--多个下拉框ID   url--请求的链接  params--传参的参数   defaultValue--回填数据时的下拉框指定默认值

function createSelect(selectIds, url, params, defaultValue) {

     console.log(params);

     //1、清空以前的

     //判断是否是数组

      if ($.type(selectIds) == 'array') {

           for (var i = 0; i < selectIds.length; i++) {

               //清空

                $("#" + selectIds[i]).empty();

                $("#" + selectIds[i]).append('<option value="0">----请选择----</option>');

             }

          } else {

                $("#" + selectIds).empty();

                $("#" + selectIds).append('<option value="0">----请选择----</option>');

            }

            //请求 生成option

            $.post(url, params, function (jsonObj) {

                for (var i = 0; i < jsonObj.length; i++) {

                    var strOption = '<option value="' + jsonObj[i].value + '">' + jsonObj[i].text + '</option>';

                    //判断是否是数组

                    //注意循环的变量,循环变量一致会导致死循环

                    if ($.type(selectIds) == 'array') {

                        for (var j = 0; j < selectIds.length; j++) {

                            $("#" + selectIds[j]).append(strOption);

                        }

                    } else {

                        $("#" + selectIds).append(strOption);

                    }

                }

                //判断是否要设置初始值

                if (defaultValue != undefined && defaultValue != null && defaultValue != "") {

                    //判断是否是数组

                    if ($.type(selectIds) == 'array') {

                        for (var j = 0; j < selectIds.length; j++) {

                            $("#" + selectIds[j]).val(defaultValue);

                        }

                    } else {

                        $("#" + selectIds).val(defaultValue);

                    }

                }

            });

        }

 

二、控制器代码

//-------------方法一------------

/// <summary>

/// 查询学院信息for下拉框

/// </summary>

/// <returns></returns>

public ActionResult SelectAcademeForSelect()

{

     List<SYS_Academe> list = myModel.SYS_Academe.ToList();

     return Json(list, JsonRequestBehavior.AllowGet);

}

 

/// <summary>

/// 查询专业信息for下拉框

/// </summary>

/// <param name="academeID">条件</param>

/// <returns></returns>

public ActionResult SelectSpecialtyForSelect(int academeID)

{

    List<SYS_Specialty> list = myModel.SYS_Specialty

    //查询条件

     .Where(o => o.academeID == academeID)

     .ToList();

     return Json(list, JsonRequestBehavior.AllowGet);

  }

 

/// <summary>

/// 查询年级信息for下拉框

/// </summary>

/// <param name="academeID">条件</param>

/// <returns></returns>

public ActionResult SelectGradeForSelect(int academeID)

{

    List<SYS_Grade> list = myModel.SYS_Grade

    .Where(o => o.academeID == academeID)

    .ToList();

     return Json(list, JsonRequestBehavior.AllowGet);

  }

//---------------方法二---------------

//根据 SelectVo 新建类统一格式

/// <summary>

/// 查询学院信息for下拉框

/// 转成共通格式

/// </summary>

/// <returns></returns>

public ActionResult SelectAcademeForSelect()

{

    List<SelectVo> list = (from tabAcademe in myModel.SYS_Academe

                           select new SelectVo

                           {

                               value = tabAcademe.academeID,

                               text = tabAcademe.academeName,

                            }).ToList();

    return Json(list, JsonRequestBehavior.AllowGet);

   }

 

/// <summary>

/// 查询专业信息for下拉框

/// </summary>

/// <param name="academeID">条件</param>

/// <returns></returns>

public ActionResult SelectSpecialtyForSelect(int academeID)

{

     List<SelectVo> list = (from tabSpecialty in myModel.SYS_Specialty

                            where tabSpecialty.academeID == academeID

                            select new SelectVo

                             {

                                 value = tabSpecialty.specialtyID,

                                 text = tabSpecialty.specialtyName,

                              }).ToList();

     return Json(list, JsonRequestBehavior.AllowGet);

  }

 

/// <summary>

/// 查询年级信息for下拉框

/// </summary>

/// <param name="academeID">条件</param>

/// <returns></returns>

public ActionResult SelectGradeForSelect(int academeID)

{

         List<SelectVo> list = (from tabGrade in myModel.SYS_Grade

                                where tabGrade.academeID == academeID

                                select new SelectVo

                                 {

                                     value = tabGrade.gradeID,

                                     text = tabGrade.gradeName,

                                  }).ToList();

     return Json(list, JsonRequestBehavior.AllowGet);

 }

 

课外知识点:

1<SYS_Academe> 是关于项目的数据表单

2<SelectVo> 是外部创建的类,查询数据时,存放表单里没有但是项目需要的数据

相关文章: