A client wanted a cool, predictive dropdownlist. So I decided to give the AJAX AutoCompleteExtender a go. It was really easy to use, didn’t have to write a lot of code and works a treat…what else could I ask for?
To use it all i did was:
1. Put the control on the page and point it at a text box.
<cc1:AutoCompleteExtender ID="agencyAutoComplete" runat="server" TargetControlID="txtAgency" MinimumPrefixLength="1" ServicePath="SoulSolutionsService.asmx" ServiceMethod="GetAgencyNameCompletion" DelimiterCharacters="" Enabled="True" OnClientItemSelected="agencySelectedHandler"></cc1:AutoCompleteExtender> <asp:TextBox ID="txtAgency" runat="server"></asp:TextBox>
2. Write a webservice to retrieve matching entries as the user types
Imports System.Web.Services <WebService(Namespace:="http://tempuri.org/")> _ <WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _ <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _ <System.Web.Script.Services.ScriptService()> _ Public Class SoulSolutionsService Inherits System.Web.Services.WebService <System.Web.Script.Services.ScriptMethod()> <WebMethod()> _ Public Function GetAgencyNameCompletion(ByVal prefixText As String, ByVal count As Integer) As String() Return AgencyBusinessLogic.GetAgencyNameCompletion(prefixText, count).ToArray() End Function <System.Web.Script.Services.ScriptMethod()> <WebMethod()> _ Public Function GetAgencyByName(ByVal agencyName As String) As AgencyDetailsEntity Return AgencyBusinessLogic.GetAgencyByName(agencyName) End Function End Class
3. I wanted to fill out some additional details based on the users selection, so i just added some javascript to handel the selection.
function agencySelectedHandler(source, eventArgs) { SoulSolutionsService.GetAgencyByName(eventArgs.get_text(), OnLookupComplete, OnError, source); } function OnLookupComplete(result, source) { if <%=agencyAutoComplete.ClientID%> == source.get_id()) { CopyToFundingAgency(result); } else { CopyToDeliveryAgency(result); } } function OnLookupComplete(result, source) { if <%=agencyAutoComplete.ClientID%> == source.get_id()) { CopyToFundingAgency(result); } else { CopyToDeliveryAgency(result); } } function OnError(result) { alert("Error: " + result.get_message()); } function CopyToFundingAgency(result) {} function CopyToDeliveryAgency(result) {}