Question

comment puis-je transmettre des informations supplémentaires à la méthode de service renvoyant la collection d'éléments? Je vais tenter d’expliquer ce que je veux dire, j’ai 2 zones de texte sur un formulaire, je dois renseigner des noms, en fonction d’un identifiant de compte spécifique dans une base de données. donc, je dois passer un entier à la méthode getNamesForDropDown. Je ne savais pas quoi faire. J'ai donc mal agi et j'ai utilisé CompletionSetCount pour transmettre les informations dont j'avais besoin:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count) 
{
   String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
   //... rest of the method removed, this should be enough code to understand
   //... the evil wrongness I did. 
}

dans mon fichier aspx frontal, je règle le CompletionSetCount en fonction de l'identifiant du compte que l'utilisateur est en train de consulter sur cette page.

<ajaxtk:AutoCompleteExtender 
    runat="server" 
    ID="AC1" 
    TargetControlID="txtAccName"
    ServiceMethod="getNamesForDropDown"
    ServicePath="AccountInfo.asmx"
    MinimumPrefixLength="1" 
    EnableCaching="true"
    CompletionSetCount='<%# Eval("idAccount") %>'
/>

Alors, c’est vraiment une mauvaise façon… quelle serait la bonne?

Était-ce utile?

La solution

azam a la bonne idée, mais la signature de la méthode autocomplete peut aussi avoir un troisième paramètre:

chaîne publique [] votre méthode (chaîne prefixText, int count, chaîne contextKey )

vous pouvez fractionner les résultats de la chaîne contextKey à l'aide de la méthode Azam - mais vous n'avez ainsi pas à vous soucier de la désinfection de l'entrée utilisateur du délimiteur (.) de .Split ()

.

Autres conseils

Fumée, je pense que c’est ce dont j'ai besoin, je jure que je n’avais jamais vu cette option avant de commencer à programmer cela. Est-ce une nouvelle propriété de autocompleteextender?

Extrait de la documentation :

ContextKey - Contexte spécifique à l'utilisateur / à la page fourni à une surcharge facultative de la méthode Web décrite par ServiceMethod / ServicePath. Si la clé de contexte est utilisée, elle devrait avoir la même signature avec un paramètre supplémentaire nommé contextKey de type chaîne:

[System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] chaîne publique [] GetCompletionList (     string prefixText, int count, string contextKey) {...}

Notez que vous pouvez remplacer " GetCompletionList " avec un nom de votre choix, mais le type de retour, le nom du paramètre et le type doivent correspondre exactement, casse comprise.

Modifier: Peu importe qu’il soit nouveau ou non, ou si je l’ignore complètement. Cela fonctionne et je suis heureux. Il m'a fallu environ 10 minutes de confusion pour comprendre ma propre réponse.

Si vous le souhaitez, vous pouvez utiliser un séparateur avec prefixText. Ainsi, vous pouvez passer " 1: bcd " et à la fin du service, vous pouvez diviser les deux éléments:

string[] arguments = prefixText.Split(':'); 
int id = Int32.Parse(arguments[0]);
string text = arguments[1]; 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top