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

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

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

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

    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.三个下拉框的:

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

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

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值