2010-03-11 9 views
3

Je ne souhaite pas utiliser de service Web pour remplir un extendeur de saisie semi-automatique dans une zone de texte. Dans ce cas, c'est l'utilisateur qui saisit le nom du pays et je ne veux pas faire un voyage dans la base de données à chaque fois. Je préfère garder une collection en état de session et lier la saisie semi-automatique à cela.Extenseur de saisie semi-automatique dans une zone de texte sans utiliser de service Web

Est-il possible de définir ServicePath et/ou ServiceMethod à quelque chose dans le codebehind par opposition à un service web?

Cordialement kumar

Répondre

1

Malheureusement, il n'y a pas d'autre option que de pirater javascript pour empêcher le navigateur de faire un appel pour obtenir la liste.

Le seul autre choix que je peux voir est de créer un webservice & utilisation EnableCaching propriété de AutoCompleteExtender, pour vous assurer que le résultat de la webservice sont mises en cache sur le client, ce qui évite les appels à webservice (base de données et à son tour).

EDIT: Sur une seconde pensée, je pense qu'il pourrait être possible de marquer une méthode statique public dans votre page avec WebMethod attribut & définir la ServicePath à votre page ASPX.

voir si cela aide - http://blogs.msdn.com/sburke/archive/2006/10/21/hint-components-that-use-web-services-with-asp-net-ajax-v1-0-beta.aspx

Je pense que cela devrait fonctionner. Mais je ne suis pas sûr, si le cadre l'exige le webservice.

0

Est-ce que votre liste des pays qui a changé, ou varient par l'utilisateur? Cela ne semble pas non plus logique de mettre cet état en session. Je ne vois pas pourquoi vous devriez frapper le serveur pour cela. Envisagez de rendre toutes vos valeurs directement en HTML, puis en utilisant Javascript pour compléter entièrement le côté client.

+0

je lie les pays de db à dropdown. quand un utilisateur tape quoi que ce soit dans une zone de texte modifiable, je dois obtenir les enregistrements correspondants à partir de la liste déroulante sans passer à nouveau à db? – kumar

0

Vous pouvez utiliser un fichier asmx local dans votre projet Web existant et vous y connecter. Là, vous pouvez mettre toute la logique dont vous avez besoin ici pour ne pas avoir à frapper une base de données si vous ne le souhaitez pas. C'est vraiment juste comme une autre page Web qui devrait avoir aucun problème pour accéder à l'état de la session.

0

Vous pouvez définir l'attribut onclientpopulating sur votre fonction javascript locale comme onclientpopulating = "onPopulating" puis, dans cette fonction js, fournir les données locales au lieu de cliquer sur le service Web. ci-dessous est l'une des implémentations que j'ai utilisé qui ne frappe jamais le webservice. completionData variable contient toutes les données à travers lesquelles i itérer pour trouver la correspondance en fonction de ce que l'utilisateur a entré dans la zone de texte. C'est un vieux exemple. Je le ferais probablement peu différemment si je le mettais en application maintenant.

function onPopulating(ace, args) 
    { 
     var prefixText = ace._currentCompletionWord(); 
     var filteredItems = GetFilteredItems(prefixText); 
     ace._update(prefixText,filteredItems,false); 
     args.set_cancel(true); 

    } 

    function GetFilteredItems(prefixText) 
    { 
     var filteredItems = []; 
     for (var nCount=0; nCount < completionData.length; nCount ++) 
     { 
      if (completionData[nCount].startsWith(prefixText)) 
      { 
       Array.add(filteredItems,completionData[nCount]); 

      } 
     } 
     return filteredItems; 
    } 
Questions connexes