2012-10-11 22 views
5

Qual è l'approccio migliore per catturare l'evento di selezione di AutoCompleteExtender, poiché il controllo non ha questo evento?Rileva AutoCompleteExtender seleziona evento

Ecco il campione di cui sto parlando. Ho due texbox (Location1TextBox, Location2TextBox) con controlli AutoCompleteExtender collegati. Questa parte funziona bene. Ora il problema è quando l'utente effettua la selezione di qualsiasi AutoCompleteExtender che ho bisogno di prendere questo evento e provare a calcolare la distanza tra location1 e location2. Il risultato dovrebbe essere popolato automaticamente in DistanceTextBox. Qualche buona opinione? Spero solo che non sarebbe finire con onchange evento per le caselle di testo ...

<asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
     <ContentTemplate> 
      <asp:Label ID="TitleLabel" runat="server" Text='<% $resources:AppResource,LocationStart %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="Location1TextBox" runat="server" CssClass="TwoColumnMiddleLongText" 
       ValidationGroup="Edit" AutoPostBack="true"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="TitleRequiredFieldValidator" runat="server" ControlToValidate="Location1TextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,LocationRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
      <ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteExtender1" TargetControlID="Location1TextBox" 
       ServiceMethod="GetCompletionList" ServicePath="TravelOrder.aspx" MinimumPrefixLength="1" 
       CompletionInterval="300" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
      <asp:Label ID="Label7" runat="server" Text='<% $resources:AppResource,LocationArrival %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="Location2TextBox" runat="server" CssClass="TwoColumnMiddleLongText" 
       ValidationGroup="Edit"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="Location2TextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,LocationRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
      <ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoCompleteExtender2" TargetControlID="Location2TextBox" 
       ServiceMethod="GetCompletionList" ServicePath="TravelOrder.aspx" MinimumPrefixLength="1" 
       CompletionInterval="300" UseContextKey="True"> 
      </ajaxToolkit:AutoCompleteExtender> 
      <asp:Label ID="Label8" runat="server" Text='<% $resources:AppResource,Distance %>' 
       CssClass="OneColumnLabel"></asp:Label>:<br /> 
      <asp:TextBox ID="DistanceTextBox" runat="server" CssClass="OneColumnText" ValidationGroup="Edit"></asp:TextBox>* 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" ControlToValidate="DistanceTextBox" 
       Display="None" ErrorMessage='<% $resources:AppResource,DistanceRequired %>' ValidationGroup="Edit"></asp:RequiredFieldValidator> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

risposta

6

È possibile rimuovere AutoPostBack="true" da una casella di testo di destinazione, iscriviti su evento TextChanged e della funzione utilizzare sotto come gestore per l'evento client di itemSelected extender OnClientItemSelected="autoCompleteEx_ItemSelected":

<script type="text/javascript"> 
    function autoCompleteEx_ItemSelected(sender, args) { 
      __doPostBack(sender.get_element().name, ""); 
    } 
</script> 
+0

Yuriy mi hai salvato la giornata! Questo è esattamente quello che stavo cercando, bello ed efficace! :) –