无限级别联动,怎样才能做活?

对于级别联动,相信大家都不再陌生。级别联动讲的就是一些级别不同的管理机构,通过选取上一层的组织,显示下面组织的名称。

就好比说,我这里有三个下拉框,我通过第一个下拉框选择了廊坊师范学院,第二个下拉框列表中会出现:物电学院、数信学院等等,而通过我再选取物电学院等,来显示二级学院下的专业等。

概念了解了,那么我们来说逻辑,整体逻辑:

1.加载一级目录的选项。

2.通过选取一级目录下的值,根据id来获取二级目录下的选项。

3.通过选取二级目录下的值,根据id来获取三级目录下的选项。

……以此类推。

刚开始做这一块的时候,我想着怎么去实现它?于是我先用cs做了一遍,逻辑彻底通了,之后我开始用bs做,实现也是没有问题。可是问题来了,我这么做,符不符合需求,怎样才能做活,怎样才能让这个级别联动让大家都可以用,可扩展,可维护?

下面来看看这个在MVC框架中的例子:

1.首先视图view中加载:

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;">@*前面参数是调用的方法的名字,后面是控制器名字*@
@{Html.RenderAction("PermissionComBoPartial", "ComTest");}</span></span>

2.控制器中部分:

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:18px;"> public PartialViewResult PermissionComBoPartial()
        {
            //从某处得到权限按钮的Json串,然后拼接成按钮
            comboEntity enCombo=new comboEntity
            {
                 Id1 = "province",
                 Id2 = "city",
                 Id3="county",
                 name ="dept",
                 valueField1="provinceId",
                 textField1="provinceName",
                 Url1 = "GetProvince",
                 Url2 = "GetCity",
                 Url3="GetCounty",
                 par1 = "provinceId",
                 valueField2 = "cityId",
                 textField2="cityName",
                 valueField3="countyId",
                 textField3="countyName",
            };

            ConverEasyUICombobox html = new ConverEasyUICombobox();
            ViewData["PermissionCombo"] = html.PermissionCombo(enCombo);

            return PartialView();
        }</span></span>

拼接字符串,创建下拉框部分:

<span style="font-size:18px;"> public class ConverEasyUICombobox
    {
        /// <summary>
        /// 拼接权限按钮
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public StringBuilder PermissionCombo(comboEntity enCombo)
        {
            StringBuilder strHtml = new StringBuilder();
            //strHtml.Append(ConverEasyUIcombo(enCombo));
            //strHtml.Append(ConverEasyUIcombo1(enCombo));
            strHtml.Append(ConverEasyUIcombo2(enCombo));
            return strHtml;
        }

        //#region 转换成 combo
        //一级下拉框
        public string ConverEasyUIcombo(comboEntity enCombo)
        {
            StringBuilder strBuilder = new StringBuilder();//放置html代码
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id1);//加入ID
            strBuilder.Append("\" class=\"easyui-combobox\" name=\"");
            strBuilder.Append(enCombo.name);
            strBuilder.Append("\" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField1);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField1);//显示值
            strBuilder.Append("',url:'");
            strBuilder.Append(enCombo.Url1);//数据源
            strBuilder.Append("'\" />");

            return strBuilder.ToString();
        }
        //#endregion
        //二级下拉框
        #region 转换成 combo
        public string ConverEasyUIcombo1(comboEntity enCombo)
        {
        //    @*<input id="province" class="easyui-combobox" data-options="
        //valueField: 'provinceId',
        //textField: 'provinceName',
        //url: 'GetProvince',

        //onSelect: function(rec){
        //     $.get('GetCity', { provinceId: rec.provinceId }, function (data) {
        //        $('#city').combobox('clear').combobox('loadData',data);
        //        $('#county').combobox('clear');},'json');
        //}">
            StringBuilder strBuilder = new StringBuilder();//放置html代码
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id1);//combobox ID
            strBuilder.Append("\" class=\"easyui-combobox\" name=\"");
            strBuilder.Append(enCombo.name);   //控件名字
            strBuilder.Append("\" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField1);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField1);//显示值
            strBuilder.Append("',url:'");
            strBuilder.Append(enCombo.Url1);//数据源
            strBuilder.Append("',onSelect: function(rec){$.get('");
            strBuilder.Append(enCombo.Url2);
            strBuilder.Append("', {");
            strBuilder.Append(enCombo.par1);
            strBuilder.Append(": rec.");
            strBuilder.Append(enCombo.valueField1);
            strBuilder.Append(" }, function (data) {");
            strBuilder.Append("$('#");
            strBuilder.Append(enCombo.Id2);
            strBuilder.Append("').combobox('clear').combobox('loadData',data);");
            //strBuilder.Append("\"$('#\"");
            //strBuilder.Append(enCombo.Id3);
            //strBuilder.Append("'\" />");
            //strBuilder.Append("\"').combobox('clear');},'json');\"");
            strBuilder.Append("},'json');}");
            strBuilder.Append("\"");
            strBuilder.Append(">");

            //<input id="county" class="easyui-combobox" data-options="valueField:'countyId',textField:'countyName'">*@
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id2);//加入ID
            strBuilder.Append("\" class=\"easyui-combobox\" name=\"");
            strBuilder.Append(enCombo.name);
            strBuilder.Append("\" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField2);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField2);//显示值
            strBuilder.Append("'\" />");
            return strBuilder.ToString();
        }
        #endregion

        //三级下拉框
        #region 转换成 combo
        public string ConverEasyUIcombo2(comboEntity enCombo)
        {
            //    @*<input id="province" class="easyui-combobox" data-options="
            //valueField: 'provinceId',
            //textField: 'provinceName',
            //url: 'GetProvince',

            //onSelect: function(rec){
            //     $.get('GetCity', { provinceId: rec.provinceId }, function (data) {
            //        $('#city').combobox('clear').combobox('loadData',data);
            //        $('#county').combobox('clear');},'json');
            //}">
            StringBuilder strBuilder = new StringBuilder();//放置html代码
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id1);//combobox ID
            strBuilder.Append("\" class=\"easyui-combobox\" name=\"");
            strBuilder.Append(enCombo.name);   //控件名字
            strBuilder.Append("\" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField1);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField1);//显示值
            strBuilder.Append("',url:'");
            strBuilder.Append(enCombo.Url1);//数据源
            strBuilder.Append("',onSelect: function(rec){$.get('");
            strBuilder.Append(enCombo.Url2);
            strBuilder.Append("', {");
            strBuilder.Append(enCombo.par1);
            strBuilder.Append(": rec.");
            strBuilder.Append(enCombo.valueField1);
            strBuilder.Append(" }, function (data) {");
            strBuilder.Append("$('#");
            strBuilder.Append(enCombo.Id2);
            strBuilder.Append("').combobox('clear').combobox('loadData',data);");
            //strBuilder.Append("\"$('#\"");
            //strBuilder.Append(enCombo.Id3);
            //strBuilder.Append("'\" />");
            //strBuilder.Append("\"').combobox('clear');},'json');\"");
            strBuilder.Append("},'json');}");
            strBuilder.Append("\"");
            strBuilder.Append(">");

            //<input id="county" class="easyui-combobox" data-options="valueField:'countyId',textField:'countyName'">*@

        //    <input id="city" class="easyui-combobox" data-options="
        //    valueField: 'cityId',
        //    textField: 'cityName',
        //    onSelect:function(rec){
        //        $.get('GetCounty', { cityId: rec.cityId }, function (data) {
        //            $('#county').combobox('clear').combobox('loadData',data);
        //        },'json');
        //}">
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id2);//加入ID
            strBuilder.Append("\" class=\"easyui-combobox\"");
            strBuilder.Append("\" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField2);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField2);//显示值
            strBuilder.Append("',onSelect: function(rec){$.get('");
            strBuilder.Append(enCombo.Url3);
            strBuilder.Append("', {");
            strBuilder.Append(enCombo.valueField2);
            strBuilder.Append(": rec.");
            strBuilder.Append(enCombo.valueField2);
            strBuilder.Append(" }, function (data) {");
            strBuilder.Append("$('#");
            strBuilder.Append(enCombo.Id3);
            strBuilder.Append("').combobox('clear').combobox('loadData',data);");
            strBuilder.Append("},'json');}");
            strBuilder.Append("\"");
            strBuilder.Append(">");

            //<input id="county" class="easyui-combobox" data-options="valueField:'countyId',textField:'countyName'">*@
            strBuilder.Append("<input id=\"");
            strBuilder.Append(enCombo.Id3);//加入ID
            strBuilder.Append("\" class=\"easyui-combobox\"");
            strBuilder.Append(" data-options=\"valueField:'");
            strBuilder.Append(enCombo.valueField3);//实际值
            strBuilder.Append("',textField:'");
            strBuilder.Append(enCombo.textField3);//显示值
            strBuilder.Append("'\">");

            return strBuilder.ToString();
        }
        #endregion

    }</span>

这样我们就可以根据我们查询数据库返回来需要的级别,自己去生成级联下拉框。下面来看看运行效果:

1.单个下拉框的:

2.两个下拉框的:

3.三个下拉框的:

实现功能简单,但是做到可扩展,运行快,能提高用户体验度就很难了,也许这就是当下社会,实现功能的很多软件,就有那么几款为大多数用户接受的原因吧。

这个级别联动,还有不足之处就是重复代码很多,还需要改进,希望大家能够提供好的建议,一起研究,进步!

时间: 2025-01-06 14:21:11

无限级别联动,怎样才能做活?的相关文章

java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis

A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势D 集成安全

不限级别联动

不限级别的联动,下边来看看代码的实现,先看看效果吧 只要点击下拉框的值,如果查询出下级还有内容则还会追加一个下拉框,这是一个简单的功能,看看代码吧 html 1 <div class="col-md-4"> 2 @Html.DropDownList("infoSectionId", ViewData["InfoSectionFather"] as SelectList,"---请选择") 3 <span id

php 用递归实现的无限级别分类

<?php header("Content-type:text/html; charset=utf-8"); /** * * @category contry_category 实现一个无限级别分类,类似种类的划分,常用在栏目导航 * */ /** +-------------------------------------------------------------------------------+ |             id       name        

angular 实现无限极联动下拉

在项目中有个2层的联动下拉的效果,百度了一下,发现都是在页面上写死了几个select 来实现的,在一些数据结构不一样的时候 就会玩不转了.比如切换到另一个的时候 它下面已经没有下一层结构的时候, 后面多出的select就多余了,而且在不知道多少层结构的时候,在页面中写死几个select 就完全不靠谱了.所以 只能是根据层级来创建select .于是,下面的代码就这样产生了!html: 1 <body ng-app='app'> 2 <div ng-controller='demo'>

无限级别分类

<?php header('Content-type:text/html;charset=utf8'); $address = array( array('id'=>1 , 'address'=>'安徽' , 'pid' => 0), array('id'=>2 , 'address'=>'江苏' , 'pid' => 0), array('id'=>3 , 'address'=>'合肥' , 'pid' => 1), array('id'=&g

无限级别分类嵌套格式抓取

select id,ruid,nickname,telphone from tf_user limit 30; +----+------+------------+-------------+ | id | ruid | nickname | telphone | +----+------+------------+-------------+ | 1 | 0 | 候淑娥 | 15852052228 | | 2 | 1 | 候淑娥1 | 15852052228 | | 3 | 2 | 候淑娥2

java 下拉多级联动 头像裁剪 调用摄像头 SpringMVC mybatis SSM

获取[下载地址]   QQ 313596790三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体[新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里

java SSM框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码

获取[下载地址]   QQ: 313596790官网 http://www.fhadmin.org/A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都

SpringMVC mybatis 多数据源 SSM java redis shiro ehcache

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩