0

I want to use AutoCompleteExtender with textbox to auto complete user's entry from mysql database.

but the problem when I run the code and enter a litter should call the webservice method but the problem that the service method return nothing here is my code so please advice me.

<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" />

    </div>
    <div>
        <asp:UpdatePanel id="UPSearch" runat="server">
            <ContentTemplate>
                <asp:Panel runat="server" style="position:absolute; top: 48px; left: 10px;">
                    <asp:TextBox ID="txtSearch" runat="server" 
                        style="position:absolute; top: 17px; left: 235px;"></asp:TextBox>
                    <cc1:AutoCompleteExtender ID="ACE_txtSearch" runat="server" TargetControlID="txtSearch" ServiceMethod= "GetByLastName" ServicePath="SearchService.asmx" MinimumPrefixLength="1" >
                    </cc1:AutoCompleteExtender>
                     <asp:RadioButton ID="rdoLastName" runat="server" 
                        style="position:absolute; top: 96px; left: 224px; width: 186px;" 
                        Text="Search By Last Name"/>

                </asp:Panel>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>

Web Service

namespace Imam_Contacts
{

    [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 SearchService : System.Web.Services.WebService
    {


        [WebMethod]
        public string[] GetByLastName(string prefixText)
        {
         int count = 10;
         string sql = "Select * from contact_info Where Last_Name like @prefixText";
         SqlDataAdapter da = new SqlDataAdapter(sql,"server=localhost;User Id=root;database=contacts;Persist Security Info=True");
         da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText+ "%"; 
         DataTable dt = new DataTable(); 
         da.Fill(dt); 

         string[] items = new string[dt.Rows.Count];
         int i = 0; 
         foreach (DataRow dr in dt.Rows) 
         {
             items.SetValue(dr["Last_Name"].ToString(), i); 
             i++; 
         } 
         return items; 
        }
    }
}
bdukes
  • 152,002
  • 23
  • 148
  • 175
Eyla
  • 5,751
  • 20
  • 71
  • 116

2 Answers2

0

This answer is only relevant if you can't find a better solution but I'd highly recommend using jQuery and one of the many autocomplete plugins it has available. It's far more reliable and much more customizable.

Spencer Ruport
  • 34,865
  • 12
  • 85
  • 147
  • it is required from me to use Ajax. Thank you, – Eyla Feb 15 '10 at 22:23
  • All html rigged auto complete fields are going to be AJAX. – Spencer Ruport Feb 16 '10 at 00:42
  • I agree, if you are not absolutely confined to ASP.NET AJAX, then jQuery would be a good alternative. Aside from the autocomplete issue I would still recommend making use of jQuery if you can. The two frameworks can coexist (mostly) without issue. – Bryan Matthews Feb 16 '10 at 03:31
0

Try adding the "ScriptMethod" attribute to your "GetByLastName" method. Also, I think the autocomplete expects the service method to have a second parameter or type int that I believe represents the maximum number of results that the method should return.

Here's what the updated code might look like:

namespace Imam_Contacts
{

    [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 SearchService : System.Web.Services.WebService
    {
        [System.Web.Script.Services.ScriptMethod]
        [WebMethod]
        public string[] GetByLastName(string prefixText, int count)
        {
         int count = 10;
         string sql = "Select * from contact_info Where Last_Name like @prefixText";
         SqlDataAdapter da = new SqlDataAdapter(sql,"server=localhost;User Id=root;database=contacts;Persist Security Info=True");
         da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText+ "%"; 
         DataTable dt = new DataTable(); 
         da.Fill(dt); 

         string[] items = new string[dt.Rows.Count];
         int i = 0; 
         foreach (DataRow dr in dt.Rows) 
         {
             items.SetValue(dr["Last_Name"].ToString(), i); 
             i++; 
         } 
         return items; 
        }
    }
}
Bryan Matthews
  • 1,116
  • 1
  • 8
  • 13