Frage

Ich bin sicher, ich werde Javascript-Code zu schreiben haben, unterstützen, dies zu tun. Ich habe einen Autocomplete-Extender einrichten, die Werte aus einer Datenbanktabelle auswählt, wenn eine Auswahl getroffen wird, möchte ich es die ID des Wertes zu einer versteckten Kontrolle ausgewählt einzustellen. Ich kann das tun, indem eine Wertänderung auf dem Textfeld der Handhabung und einen ausgewählten Aufruf an die Datenbank zu machen, wählt idCompany von Unternehmen, in denen Company = „das Textfeld Wert“;

Das Wichtigste ist, die Werte des Textfeldes zu beschränken, dass die Target für den Autocomplete-Extender Verwenden Sie nur Werte aus der Autovervollständigung nach unten fallen ist. Ist dies möglich, mit dieser Steuerung gibt es Beispiele irgendwo? gibt es eine bessere Kontrolle (innerhalb der Ajax Control Toolkit oder .NET Framework-Standard - keine Fremdüberwachung) zu verwenden,

?

Ich werde versuchen, einige Javascript zu arbeiten, aber ich werde auf diese Frage wird die Kontrolle zurück, um zu sehen, ob jemand ein paar nützlichen Links hat. Ich habe schon eine ganze Weile, diese letzte Nacht googeln.

Update: Ich habe nicht bekommen eine Antwort oder keine nützliche Links, ich habe eine fast akzeptabel Benutzersteuerung geschrieben, das tut, was ich will, mit ein paar bearbeitbar Fragen.

War es hilfreich?

Lösung

war niemand in der Lage mir eine Antwort zu geben. Dies hat eine laufende Saga gewesen. Es begann, als ich versuchte, eine Lösung nicht zu finden mit Drop-Down-Listen für große Datenmengen . Ich habe mit diesem so oft in früheren Projekten auf Probleme stoßen. Dies scheint praktikabel Code. Jetzt muß ich wissen, wie eine Autopostback-Eigenschaft, liefern und für einige Veranstaltungen, wie SelectedValueChanged zu ermöglichen. Und aufgrund der Javascript, wird es mit einem anderen Steuerelement in Konflikt geraten, wenn ich mehr als eine von ihnen auf der gleichen Seite. Nun, das sind einige der bekannten Probleme ich an mit dem Code suchen, aber es ist ein Anfang und auf jeden Fall besser als bei einem aufgehängten Browser sucht 3 oder 4 Minuten, während die Dropdown-30k wird geladen Listeneinträge.

Dieser Code wird vorausgesetzt, es gibt eine asmx Datei mit den Skriptmethoden GetCompanyListBySearchString und GetCompanyIDByCompanyName.

Aspx-Datei

<%@ 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" />

Code hinter

[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
    }
}
}

Andere Tipps

Danke für Ihren Beitrag hier. Es ist sinnvoll, aber es wird angenommen, dass jeder das Setup kennt die Webservice durch eine Javascript-Funktion aufgerufen zu erhalten.

Leider sooer Neuling sein, aber ich konnte nicht den Webservice von Client-Seite aufgerufen. Ich lese diese Dokumentation: http://msdn.microsoft.com/en-us /magazine/cc163499.aspx

Darüber hinaus fand ich einen interessanten Beitrag, der erklärt, wie ein Name-Wert-Paar erstellen / bekommen, das ist ziemlich viel, was man erwartet, soweit ich verstanden:

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

Sorry, wenn ich falsch verstanden Sie, aber ich bin nur versuchen, andere Menschen zu führen, die durch die gleiche Situation passieren.

Vielen Dank.

Sie können den Wert der Auswahl überprüfen, indem Sie auf ClientItemSelected Ereignis Trapping und sicherzustellen, dass es nicht leer ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top