無限層級聯動,怎樣才能做活?

來源:互聯網
上載者:User

標籤:

 對於層級聯動,相信大家都不再陌生。層級聯動講的就是一些層級不同的管理機構,通過選取上一層的組織,顯示下面組織的名稱。

    就好比說,我這裡有三個下拉框,我通過第一個下拉框選擇了廊坊師範學院,第二個下拉框列表中會出現:物電學院、數信學院等等,而通過我再選取物電學院等,來顯示二級學院下的專業等。

 概念瞭解了,那麼我們來說邏輯,整體邏輯:

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

    實現功能簡單,但是做到可擴充,運行快,能提高使用者體驗度就很難了,也許這就是當下社會,實現功能的很多軟體,就有那麼幾款為大多數使用者接受的原因吧。

    這個層級聯動,還有不足之處就是重複代碼很多,還需要改進,希望大家能夠提供好的建議,一起研究,進步!

無限層級聯動,怎樣才能做活?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.