Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rockysp

[Resolvido] AutoComplete AJAX

Recommended Posts

Pessoal, estou tentando utilizar o componente AutoComplete do AJAX, só que não está funcionando. Criei um WebService que testei a parte e está funcionando normalmente, porém AutoComplete não está acionando o método do meu WebService, coloquei um break point e nada de passar por lá.

 

Se alguém tiver a solução fico muito agradecido.

 

AutoComplete.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AutoComplete.aspx.cs" Inherits="TESTES.AutoComplete" %>

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
   <title>Untitled Page</title>
</head>
<body>
   <form id="form1" runat="server">
   <div>
       <asp:ScriptManager ID="ScriptManager1" runat="server">
       </asp:ScriptManager>
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
       <cc1:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server" 
           ServiceMethod="searchFornecedor" ServicePath="WebService1.asmx" 
           TargetControlID="TextBox1">
       </cc1:AutoCompleteExtender>
   </div>
   </form>
</body>
</html>

 

 

WebService1.asmx

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using Oracle.DataAccess.Client;

namespace TESTES
{
   /// <summary>
   /// Summary description for WebService1
   /// </summary>
   [WebService(Namespace = "http://tempuri.org/")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ToolboxItem(false)]
   // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
   // [system.Web.Script.Services.ScriptService]
   public class WebService1 : System.Web.Services.WebService
   {

       [system.Web.Services.WebMethod]
       [system.Web.Script.Services.ScriptMethod]
       public string[] searchFornecedor(string prefixText, int count)
       {
           List<String> lista = new List<String>();
           OracleConnection conexao = new OracleConnection("Data Source=ORASINTO;User Id=sis;Password=sis;");

           try
           {
               String strSQL = @"SELECT Apeli_Emp FROM (SELECT Apeli_Emp FROM Empresas WHERE UPPER(Apeli_Emp) LIKE UPPER('" + prefixText.ToUpper() + "%') ORDER BY Apeli_Emp) WHERE Rownum < 10";
               conexao.Open();
               OracleCommand cmd = new OracleCommand(strSQL, conexao);
               OracleDataReader dr = cmd.ExecuteReader();

               while (dr.Read())
               {
                   lista.Add(dr[0].ToString());
               }
           }
           catch (Exception ex)
           {
               lista.Add("Erro: " + ex.Message);
           }
           finally
           {
               conexao.Close();
           }

           return lista.ToArray();
       }
   }
}

 

 

Valeu!!!

 

Fabio

 

E ai pessoal, ninguém tem idéia do que pode estar ocorrendo? Já configurei o MinimumPrefixLength para 1 e nada.

 

Por favor, me deem uma luz.

 

Pessoal, se alguém tiver um exemplo que funcione e puder me mandar eu agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,eu trabalho com isso....só que no momento, não tenho acesso aos códigos fontes. Mas tenta fazer da seguinte forma.

 

Faça um método no seu Web Service com um nome qualquer, por exemplo:

 

[system.Web.Services.WebMethod]
[system.Web.Script.Services.ScriptMethod]
public string[] search(string prefixText, string contextkey) //esse será o método principal
{
   switch(contextkey){
         case "fornecedor":
             return searchFornecedor(prefixText);
             break;
         case "cliente":
             return searchCliente(prefixText);
             break;
   }
}


[system.Web.Services.WebMethod]
[system.Web.Script.Services.ScriptMethod]
public string[] searchFornecedor(string prefixText)
{
    ...
}

[system.Web.Services.WebMethod]
[system.Web.Script.Services.ScriptMethod]
public string[] searchCliente(string prefixText)
{
    ...
}

 

No autoCompleteExtender tem uma propriedade "contextKey", ali você coloca "fornecedor", no caso do meu exemplo, e ServiceMethod="search".

 

Esse método poderá funcionar para vários AutoComplete...é só no Switch/case você retornar o valor de um método, dependendo do que você coloca no ContextKey do AutoComplete.

A propriedade MinimumPrefixLength funciona da seguinte forma: se você colocar 5, o seu método do WebService só irá ser executado quando você digitar 6 caracteres, ou seja, o método só é chamado quando você digita um caractere a mais do que você definiu na propriedade MinimumPrefixLength.

 

Uma coisa que eu vi no seu código:

 

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

 

No seu WebMethod:

 

[WebService(Namespace = "http://tempuri.org/")]

 

Isso pode ser o motivo pelo qual seu AutoComplete não está funcionando. Seu namespace AjaxControlToolkit é incompatível com o namespace do WebService. Tenta tirar o namespace dos dois lugares.

 

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deise, coloquei um brake point no método do WebService e o mesmo nem sequer é chamado, tirei as duas linhas que mencionou. A segunda tudo bem, mas a primeira sem ela o componente do AutoComplete não funciona.

 

To ficando maluco aqui já...rsss.

 

 

Uma coisa que eu vi no seu código:

 

<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="cc1" %>

 

No seu WebMethod:

 

[WebService(Namespace = "http://tempuri.org/")]

 

Isso pode ser o motivo pelo qual seu AutoComplete não está funcionando. Seu namespace AjaxControlToolkit é incompatível com o namespace do WebService. Tenta tirar o namespace dos dois lugares.

 

 


 

 

Pessoal, consegui solucionar o problema, que na verdade foi mais falta de atenção.

 

 

 

No WebService antes da declaração da classe, foi preciso descomentar a linha como o próprio comentario acima dela já recomendava.

 

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[system.Web.Script.Services.ScriptService]

Daí funcionou que é uma beleza.

 

 

 

Abraços!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.