2012-03-07 28 views
7

Tengo el nombre cuadro de texto txtEmailList, i proporcionado la lista de autocompletar para ello,jQuery AutoComplete con la lista <string> como Fuente

<asp:TextBox runat="server" ID="txtEmailList" CssClass="txtAutoComplete"> 

guión de autocompletar

$('#txtEmailList').autocomplete({ 
       source: function(request, response) { 
// this is the ajax call, which is running successfully 
        var msg = 
Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
        response(msg.d); 
       } 

      }); 

de salida vendrá como así (en Firebug se muestra como texto/sin formato), ¿cómo puedo adjuntar esta matriz a la propiedad de origen? (No puedo usar el método $ .ajax, ya que necesito usar ajaxpro como reglas de la oficina), así que obtengo la lista de la matriz de la llamada ajax, ¿cómo puedo vincular la autocompletar?

[ "Lista 1", "Lista 2", "Lista 3", "Lista 4"];/* // esta es la respuesta de salida de jquery (de firebug)

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public List<string> AutoComplete(string query) 
{ 
List<string> objLisItmes = new List<string>(); 
objLisItmes.Add("List 1"); 
objLisItmes.Add("List 2"); 
objLisItmes.Add("List 3"); 
objLisItmes.Add("List 4"); 
return objLisItmes; 
} 

ésta es la salida incendiario en las cabeceras de respuesta

cache-Controlno-caché de contenido-Length40 contenido-TypeText/plain; charset = UTF-8 DateWed 07 Mar 2012 10:45:37 GMT Expira-1Pragmano-cache

+0

Creo que se necesita devolver lo que se obtiene desde el servidor ... – gdoron

+0

cómo? Ya intenté la respuesta (msg.d) pero no se muestra en autocompletar –

+0

no ...Escribe esto: 'return msg;' – gdoron

Respuesta

5

En lugar de devolver una lista. Volvería una matriz de cadenas como:

[AjaxPro.AjaxMethod(HttpSessionStateRequirement.ReadWrite)] 
public string[] AutoComplete(string query) 
{ 
    List<string> objLisItmes = new List<string>(); 
    objLisItmes.Add("List 1"); 
    objLisItmes.Add("List 2"); 
    objLisItmes.Add("List 3"); 
    objLisItmes.Add("List 4"); 
    return objLisItmes.ToArray(); 
} 
+0

¿qué cambiará? ¿Te ayudará? Devolviendo la matriz? Cómo Ayudará? –

+0

La lista debería funcionar bien, y parece ser así porque dice que está obteniendo la lista de elementos. ¿Puede mostrar el html para el cuadro de texto? – JCherryhomes

+0

gracias :) de cualquier manera que funcione. ahora, pero no entiendo por qué ToArray() es necesario aquí? –

2

En lugar de utilizar

$('#txtEmailList') 

intentar usar

$('input[id$="txtEmailList"]') 

Puesto que usted está utilizando un cuadro de texto control de servidor a su identificación para lo más probable es llegando a su fin como algo así como "parentID1_parentID2_txtEmailList". El código anterior captará la entrada que tiene una ID que termina con "txtEmailList".

Así es como lo estoy haciendo en mi proyecto de prueba y está funcionando. Por supuesto que no estoy usando AjaxPro, así que no estoy seguro de cómo lo harías con eso, pero tal vez te dé algunas ideas.

<script type="text/javascript"> 
     $(function() { 
      var element = $('input[id$="TextBox1"]'); 

      element.autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: "Default.aspx/GetList", 
         data: "{ 'term': '" + request.term + "' }", 
         dataType: "json", 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         dataFilter: function(data) { return data; }, 
         success: function (data) { 
          response($.map(data.d, function (item) { 
           return { 
            value: item 
           } 
          })) 
         } 
        }) 
       } 
      }); 
     }); 
    </script> 
+0

¿cuál es la diferencia? como lo estoy accediendo directamente. ? creo que esta no es la respuesta. incluso su comming en función abierta de jquery autocompletar –

+0

Actualicé mi respuesta para explicar el diff – JCherryhomes

+0

no está en la vista de cuadrícula. para renderizar así. está en un cuadro de texto sin formato en un div, incluso he comprobado el id de renderizado, es el mismo que di en el selector de jquery. así que el problema será con el tipo de respuesta, supongo –

1

¿No debería ser:

$('#txtEmailList').autocomplete({source: function(request, response) { 
    // this is the ajax call, which is running successfully 
    var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; //(ajaxpro functions) 
    response(msg); 
    } 

}); 

?

De lo contrario, le sugiero que use console.log (msg) para analizar el objeto de respuesta si es posible.

1

Solo asegúrese de que su llamada AJAX esté devolviendo formato de cadena válido como este dummy example. Guárdelo en una variable. luego usarlo para definir source propiedad como esta:

var availableValues = ["List 1","List 2","List 3","List 4"]; 
// var msg = Assessments_JqueryAutoComplete.AutoComplete(request.term).value; 
$("#txtEmailList").autocomplete({ 
    source: availableValues 
}); 
Cuestiones relacionadas