Question

Je suis sûr que je vais devoir écrire du code javascript prenant en charge cette opération. J'ai une extension autocomplete configurée qui sélectionne les valeurs d'une table de base de données. Lorsqu'une sélection est effectuée, j'aimerais qu'elle définisse l'ID de la valeur sélectionnée sur un contrôle masqué. Je peux le faire en gérant un changement de valeur dans la zone de texte et en effectuant un appel select à la base de données, Select idCompany from Companies Où CompanyName = "la valeur de la zone de texte";

Le plus important est de contraindre les valeurs de la zone de texte qui constitue le contrôle cible pour l'extension de la saisie semi-automatique à utiliser UNIQUEMENT les valeurs du menu déroulant de la saisie semi-automatique. Est-ce possible avec ce contrôle, y a-t-il des exemples quelque part? existe-t-il un meilleur contrôle à utiliser (dans la boîte à outils de contrôle ajax ou dans le framework .net standard - pas un contrôle tiers)?

Je vais essayer de trouver du javascript, mais je reviendrai à cette question pour voir si quelqu'un a des liens utiles. Cela fait un certain temps que je surfe sur Google hier soir.

Mise à jour: je n’ai pas obtenu de réponse ni de lien utile, j’ai mis en place un contrôle utilisateur presque acceptable qui fait ce que je veux, avec quelques problèmes pratiques.

Était-ce utile?

La solution

Personne n'a pu me donner une réponse. Cela a été une saga en cours. Cela a commencé lorsque je tentais de trouver une solution non utilisée listes déroulantes pour de grandes quantités de données . J'ai rencontré des problèmes avec cela tellement de fois dans des projets précédents. Cela semble être un code réalisable. Maintenant, j'ai besoin de savoir comment fournir une propriété AutoPostBack et autoriser certains événements, tels que SelectedValueChanged. Et à cause du javascript, cela entrera en conflit avec un autre contrôle si j'ai plusieurs d'entre eux sur la même page. Eh bien, voici quelques-uns des problèmes connus liés au code, mais c'est un début et c'est certainement mieux que de regarder un navigateur bloqué pendant 3 ou 4 minutes pendant que la liste déroulante charge 30 000 éléments de liste.

Ce code suppose qu'il existe un fichier asmx avec les méthodes de script GetCompanyListBySearchString et GetCompanyIDByCompanyName.

FICHIER 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" />

CODE DERRIÈRE

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

Autres conseils

Merci pour votre message ici. Il est utile, cependant, en supposant que tout le monde connaisse la configuration pour que le service Web soit appelé par une fonction javascript.

Désolé d'être si novice, mais je n'ai pas pu appeler le service Web du côté client. J'ai lu cette documentation: http://msdn.microsoft.com/en-us /magazine/cc163499.aspx

De plus, j’ai trouvé un article intéressant qui explique comment créer / obtenir une paire nom-valeur, ce qui correspond à peu près à ce que vous attendez pour autant que je sache:

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

Désolé si je vous ai mal compris, mais j'essaie simplement de guider d'autres personnes qui traversent la même situation.

Merci beaucoup.

Vous pouvez vérifier la valeur de la sélection en capturant l'événement ClientItemSelected et en vous assurant qu'il n'est pas vide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top