2008-10-09 7 views
2

Comment puis-je transmettre des informations supplémentaires à la méthode de service renvoyant la collection d'éléments? Je vais essayer d'expliquer ce que je veux dire, j'ai 2 zones de texte sur un formulaire, j'ai besoin de remplir des noms, en fonction d'un identifiant de compte spécifique dans une base de données. donc, j'ai besoin de passer un entier à la méthode getNamesForDropDown. Je ne pouvais pas comprendre ce qu'il faut faire, donc je ne la mauvaise chose, et a utilisé le CompletionSetCount pour passer effectivement les informations dont je avais besoin:AutoCompleteExtender dans ASP.NET informations supplémentaires

[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 face avant, je mis le CompletionSetCount basé sur l' Identifiant du compte que l'utilisateur est en train de visualiser sur cette page.

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

Donc, c'est certainement un mauvais moyen ... quelle serait la bonne façon?

Répondre

5

azam a le droit IDÉE, mais la signature de la méthode de saisie semi-automatique peut également avoir un troisième paramètre:

public string [] yourmethod (string prefixText, int count, string contextKey)

vous

peut diviser les résultats de la chaîne de contextKey en utilisant la méthodolo- de Azam, mais cette façon, vous n'avez pas à vous soucier sanatizing l'entrée de l'utilisateur du séparateur d '.split() (:)

+0

Merci pour la correction! – azamsharp

2

Si vous le souhaitez, vous pouvez utiliser un séparateur avec l'élément prefixText. Ainsi, vous pouvez passer « 1: DCB » et la fin de service, vous pouvez diviser les deux éléments:

string[] arguments = prefixText.Split(':'); 
int id = Int32.Parse(arguments[0]); 
string text = arguments[1]; 
+0

comment puis-je contrôler quel texte de préfixe est envoyé à la méthode? – stephenbayer

+0

Ohh je vois !! Oui, tu as raison. Le contrôle se concentre instantanément sur le ServiceMethod sans s'arrêter entre les deux. Je vais devoir vérifier cela plus tard! – azamsharp

3

fumée Saint, je pense que c'est ce que je dois, je vous jure que je ne ai jamais vu cette option avant de commencer programmer ceci. Est-ce une nouvelle propriété pour l'autocompleteextender?

Excerpt from Documentation:

contextKey - Utilisateur/page contexte spécifique fourni à une surcharge en option de la méthode Web décrit par ServiceMethod/ServicePath. Si la clé de contexte est utilisé, il doit 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] publique string [] GetCompletionList ( chaîne prefixText, nombre entier, chaîne contextKey) {...}

Notez que vous pouvez remplacer "GetCompletionList" par un nom de votre choix, mais le type de retour et le nom et le type du paramètre doivent être exactement match, y compris le cas.

Modifier: Peu importe si c'est nouveau ou pas, ou si je l'ai complètement oublié. Cela fonctionne, et je suis heureux. Il m'a fallu environ 10 minutes d'être confus pour trouver ma propre réponse.

Questions connexes