2010-10-26 4 views
0

Imaginez que j'ai une zone de texte (avec saisie semi-automatique 1.1, pas la dernière version de l'interface utilisateur) et une case à cocher. La zone de texte déclenche une page asp.net .ashx qui exécutera une procédure stockée sur le serveur sql et renverra les résultats.jQuery autocomplete: modifier la requête SQL en fonction de la case à cocher sélectionnée

Tout fonctionne, mais je veux ajouter une autre fonctionnalité. Lorsque la case est cochée, je souhaite que stored_procedure_1 soit exécuté. Si la case n'est pas cochée, stored_procedure_2 doit être exécuté. La case à cocher n'est pas cochée par défaut.

Ma question: Comment puis-je indiquer la page ashx si la case est cochée ou non? Par défaut, la saisie semi-automatique déclenchera quelque chose comme: autocompletedata.ashx? Q = myname et qui exécutera stored_procedure_2, mais lorsque la case est cochée, elle doit déclencher autocompletedata.ashx?q=myname&mycheckbox=begin afin que stored_procedure_1 soit exécuté.

Dois-je ajouter du code jQuery pour passer la case cochée? Je suis totalement perdu ..

Merci d'avance.

éléments de formulaire:

<input id="search_employee" type="text" class="employee" /> 
<input type="checkbox" name="mycheckbox" value="begin" /> 

jQuery:

$().ready(function() { 

     $("#search_employee").autocomplete("includes/AutocompleteData.ashx", { 
      minChars: 3, 
      max: 15, 
      selectFirst: false, 
      scrollHeight: 300, 
      formatItem: function(data, i, n, value) { 
      if (value.split("_")[3]!== null) 
      { 
      return "<img style = 'width:40px;height:53px;float:left; margin:2px 5px 2px 0' src='/pictures/thumbs/" 
      + value.split("_")[3] + "'/> " + value.split("_")[0] + "<br /><span class=smallname>" + value.split("_")[2] + "<br/>" + value.split("_")[4] + "</span>"; 
     } 
    }, 
      formatResult: function(data, value) { 
       return value.split("_")[0]; 
      } 
     }); 

Une partie de autocompletedata.ashx:

Dim searchname As String = context.Request.QueryString("q") 
Dim searchstart as string = context.Request.QueryString("mycheckbox") 
Dim searchsql as string 

if searchstart = "begin" then 
    searchsql = "stored_procedure_1" 
else 
    searchsql = "stored_procedure_2" 
end if 

Dim conn As SqlConnection = New SqlConnection 
conn.ConnectionString = ConfigurationManager.ConnectionStrings("MyConn").ConnectionString 
Dim cmd As SqlCommand = New SqlCommand 
cmd.CommandType = Data.CommandType.StoredProcedure 
cmd.CommandText = searchsql.ToString 
cmd.Parameters.AddWithValue("@SearchText", searchname)   

Répondre

1

Vous pouvez utiliser .setOptions pour définir les paramètres supplémentaires:

ac.setOptions({ params: { paramOne:'somevalue', somethingelse:'foobar' } }); 

C'est la façon programmatique, mais dans votre cas:

$("#search_employee").autocomplete("includes/AutocompleteData.ashx", { 
    params: { flag:'true' }, // just grab the checked attr beforehand 
    ...//rest of your AC stuff 

qui exécutera HTTP GET suivante:

GET: includes/AutocompleteData.ashx?flag=true 

Vous permettant d'y accéder via la collection Request.QueryString dans l'ASHX.

EDIT

Mon mauvais - je pensais une autre version de l'AC.

Je pense que le PARAM est appelé "extraParams":

$("#search_employee").autocomplete("includes/AutocompleteData.ashx", { 
    extraParams: { flag:'true' } 

essayer les deux, on/devrait fonctionner. :)

HTH.

+0

Merci de m'avoir aidé dans la bonne direction :) Quand j'ajoute "extraParams: {'mycheckbox': 'begin'}" il appellerait en effet stored_procedure_1. C'est un pas de plus. Mais il ne faut ajouter ces extraparamètres que lorsque la case est cochée (ou sinon retourner false). Comment (et où) dois-je définir dynamiquement la valeur de la case à cocher? –

+0

Que voulez-vous dire "return false"? D'après l'apparence de votre code, si le CB est coché, vous voulez appeler SP1, sinon SP2 - n'est-ce pas? Vous ne serez pas en mesure de passer "begin" ou null, restez simple - passez simplement l'attribut checked directement à l'ASHX: 'extraParams: {flag: $ (" # idOfYourCheckbox "). Attr (" checked ")}' . – RPM1984

+0

Merci, ça l'a fait! –

Questions connexes