Domanda

Sono sicuro che dovrò scrivere il codice javascript di supporto per farlo. Ho un extender con completamento automatico che seleziona i valori da una tabella del database, quando viene effettuata una selezione, vorrei che impostasse l'ID del valore selezionato su un controllo nascosto. Posso farlo gestendo una modifica del valore nella casella di testo ed effettuando una chiamata di selezione al database, selezionare idCompany dalle società in cui CompanyName = " il valore della casella di testo " ;;

La cosa più importante è limitare i valori della casella di testo che è il controllo target dell'estensione per il completamento automatico per utilizzare SOLO i valori dal menu a discesa del completamento automatico. È possibile con quel controllo, ci sono esempi da qualche parte? esiste un controllo migliore da usare (all'interno del toolkit di controllo ajax o del framework .net standard - non un controllo di terze parti)?

Proverò a trovare un po 'di javascript, ma tornerò su questa domanda per vedere se qualcuno ha dei link utili. Ho cercato su Google l'ultima notte per un bel po '.

Aggiornamento: non ho ricevuto risposta o link utili, ho pubblicato un controllo utente quasi accettabile che fa quello che voglio, con alcuni problemi fattibili.

È stato utile?

Soluzione

Nessuno è stato in grado di darmi una risposta. Questa è stata una saga in corso. È iniziato quando cercavo di trovare una soluzione elenchi a discesa per grandi quantità di dati . Ho incontrato problemi con questo così tante volte in progetti precedenti. Questo sembra essere un codice praticabile. Ora ho bisogno di sapere come fornire una proprietà AutoPostBack e consentire alcuni eventi, come SelectedValueChanged. E a causa del javascript, entrerà in conflitto con un altro controllo, se ne ho più di uno sulla stessa pagina. Bene, questi sono alcuni dei problemi noti che sto esaminando con il codice, ma è un inizio e decisamente migliore rispetto a un browser sospeso per 3 o 4 minuti mentre il menu a discesa carica 30k voci dell'elenco.

Questo codice presuppone l'esistenza di un file asmx con i metodi di script GetCompanyListBySearchString e GetCompanyIDByCompanyName.

FILE ASPX

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SelectCompany.ascx.cs" Inherits="Controls_SelectCompany" %>
<%@ Register TagPrefix="ajaxToolkit" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit" %>
<script language="javascript" type="text/javascript">
    var txtCompanyIDHiddenField = '<%= fldCompanyID.ClientID %>';
    var txtCompanyIDTextBox = '<%= txtCompany.ClientID %>';
    function getCompanyID() {
        if (document.getElementById(txtCompanyIDTextBox).value != "")
            CompanyService.GetCompanyIDByCompanyName(document.getElementById(txtCompanyIDTextBox).value, onCompanyIDSuccess, onCompanyIDFail);
    }
    function onCompanyIDSuccess(sender, e) {
       if (sender == -1)
           document.getElementById(txtCompanyIDTextBox).value = "";
       document.getElementById(txtCompanyIDHiddenField).value = sender;
    }
    function onCompanyIDFail(sender, e) {
        document.getElementById(txtCompanyIDTextBox).value = "";
        document.getElementById(txtCompanyIDHiddenField).value = "-1";
    }
    function onCompanySelected() {
        document.getElementById(txtCompanyIDTextBox).blur();
    }
</script>
<asp:TextBox ID="txtCompany" runat="server"  onblur='getCompanyID()' 
/><ajaxToolkit:AutoCompleteExtender runat="server" ID="aceCompany" CompletionInterval="1000" CompletionSetCount="10"
 MinimumPrefixLength="2"  ServicePath="~/Company/CompanyService.asmx" ServiceMethod="GetCompanyListBySearchString"
 OnClientItemSelected="onCompanySelected" TargetControlID="txtCompany" />
 <asp:HiddenField ID="fldCompanyID" runat="server" Value="0" />

CODICE DIETRO

[System.ComponentModel.DefaultProperty("Text")]
[ValidationProperty("Text")] 
public partial class ApplicationControls_SelectCompany : System.Web.UI.UserControl

{
public string Text
{
    get { return txtCompany.Text; }
    set
    {
        txtCompany.Text = value;
        //this should probably be read only and set the value based off of ID to 
        // make certain this is a valid Company
    }
}
public int CompanyID
{
    get
    {
        int ret = -1; Int32.TryParse(fldCompanyID.Value, out ret); return ret;
    }
    set
    {
        fldCompanyID.Value = value.ToString();
        //Todo:  should set code to set the Text based on the ID to keep things straight
    }
}
}

Altri suggerimenti

Grazie per il tuo post qui. È utile, tuttavia, presuppone che tutti conoscano l'installazione per richiamare il servizio web da una funzione javascript.

Mi dispiace essere così novellino, ma non sono riuscito a richiamare il servizio web dal lato client. Ho letto questa documentazione: http://msdn.microsoft.com/en-us /magazine/cc163499.aspx

Inoltre, ho trovato un post interessante che spiega come creare / ottenere una coppia nome-valore che è praticamente quello che ti aspetti da quanto ho capito:

http://blogs.msdn.com/phaniraj/archive/2007/06/19/how-to-use-a-key-value-pair-in-your-autocompleteextender.aspx

Scusami se ti ho frainteso, ma sto solo cercando di guidare altre persone che attraversano la stessa situazione.

Grazie mille.

È possibile verificare il valore della selezione eseguendo il trapping sull'evento ClientItemSelected e assicurarsi che non sia vuoto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top