Asp.net Ajax CascadingDropDown 控制項的用法
- 2019 年 10 月 7 日
- 筆記
CascadingDropDown 控制項提供了級聯下拉列表顯示的功能。在一些特定的業務環境下,我們希望下拉列表會根據頁面中的另外一個控制項(TextBox、CheckBox或DropDownList)的值而顯示不同的列表項,最常見的就是在進行區域選擇時,當選擇了省級為「北京」時,我們希望在DropDownList中的列表項為「朝陽」、「海淀」、「東城」、「西城」等屬於北京市的下級區域。如上所說,對於存在包含關係的下拉列表選擇中,CascadingDropDown控制項將會非常有用。
要是用CascadingDropDown 控制項,首要現在頁面上放置一個DropDownList控制項,並將CascadingDropDown控制項的TargetControlID設置為DropDownList控制項。下面是CascadingDropDown的使用程式碼:
<ajaxToolkit:CascadingDropDown ID="CDD1" runat="server" TargetControlID="DropDownList2" Category="Model" PromptText="Please select a model" LoadingText="[Loading models...]" ServicePath="CarsService.asmx" ServiceMethod="GetDropDownContents" ParentControlID="DropDownList1" SelectedValue="SomeValue"/>
- TargetControlID:目標控制項的ID
- Category:所屬分類名稱,在下級列表中,會作為參數的一部分傳遞給Webservice的方法,用來確定需要返回給下級列表什麼樣的數據。
- PromptText:在沒有選擇時顯示的內容
- LoadingText:在進行數據載入時顯示的內容
- ServicePath:提供數據的WebService的路徑
- ServiceMethod:WebService的方法
- ParentControlID:上一級(父級)列表的ID
- SelectedValue:默認選中的數據
我們來添加一個示例,首先在頁面放置三個DropDownList,分別用來選擇省、市、區,程式碼如下:
<table> <tr> <td> 省 </td> <td> <asp:DropDownList ID="DropDownList1" runat="server" Width="170"/> </td> </tr> <tr> <td> 市 </td> <td> <asp:DropDownList ID="DropDownList2" runat="server" Width="170"/> </td> </tr> <tr> <td> 區 </td> <td> <asp:DropDownList ID="DropDownList3" runat="server" Width="170"/> </td> </tr> </table>
然後,為這三個DropDownList分別添加CascadingDropDown 控制項,程式碼如下:
<ajaxToolkit:CascadingDropDown ID="CascadingDropDown1" runat="server" TargetControlID="DropDownList1" Category="省" PromptText="請選擇一個省" LoadingText="正在載入省……" ServicePath="/WebService/CascadingDropDownService.asmx" ServiceMethod="GetDropDownContents"/> <ajaxToolkit:CascadingDropDown ID="CascadingDropDown2" runat="server" TargetControlID="DropDownList2" Category="市" PromptText="請選擇一個市" LoadingText="正在載入市……" ServicePath="/WebService/CascadingDropDownService.asmx" ServiceMethod="GetDropDownContents" ParentControlID="DropDownList1"/> <ajaxToolkit:CascadingDropDown ID="CascadingDropDown3" runat="server" TargetControlID="DropDownList3" Category="區" PromptText="請選擇一個區" LoadingText="正在載入區……" ServicePath="/WebService/CascadingDropDownService.asmx" ServiceMethod="GetDropDownContents" ParentControlID="DropDownList2"/>
可以看出,這段程式碼三個CascadingDropDown控制項中的ServicePath和ServiceMethod是相同的,我們只需要在方法GetDropDownContents中添加適當的分支處理就可以了,CascadingDropDownService的GetDropDownContents方法的程式碼如下:
[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] public CascadingDropDownNameValue[] GetDropDownContents(string knownCategoryValues, string category) { CascadingDropDownNameValue[] result =null; StringDictionary knownCategoryValuesDictionary = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); switch (category) { case"省": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("河南", "hn"), new CascadingDropDownNameValue("山西", "sx")}; } break; case"市": { switch (knownCategoryValuesDictionary["省"]) { case"hn": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("洛陽", "ly"), new CascadingDropDownNameValue("南陽", "ny") }; } break; case"sx": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("太原", "ty"), new CascadingDropDownNameValue("呂梁", "ll") }; } break; } } break; case"區": { switch (knownCategoryValuesDictionary["市"]) { case"ly": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("西工區", "xg"), new CascadingDropDownNameValue("澗西區", "jx") }; } break; case"ny": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("卧龍區", "wl")}; } break; case"ty": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("迎澤區", "yz"), new CascadingDropDownNameValue("杏花嶺區", "xhl") }; } break; case"ll": { result =new CascadingDropDownNameValue[] { new CascadingDropDownNameValue("離石區", "ls")}; } break; } } break; } return result; }
這個WebService要允許通過JS調用,所以要在Service的頭部添加[System.Web.Script.Services.ScriptService],這樣就可以了。
上面的示例只是一個簡單的測試例子,更複雜的應用需要訪問資料庫、處理複雜業務等,但控制項本身的用法沒有太大差別,希望你能夠舉一反三啊!
希望對你有所幫助,謝謝關注!