AJAX AutocompleteExtender не работает. Веб-сервис работает - PullRequest
1 голос
/ 08 апреля 2009

Это c # .net 2.0. Я использую мастер-страницу.

  • WebService отлично работает самостоятельно.
  • Я полностью в тупике. Когда я набираю текстовое поле, ничего не происходит.

Файлы:

EditTicket.aspx AutoComplete.asmx App_Code / AutoComplete.cs

EditTicket.aspx:

        <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc2" %>


        <asp:ScriptManager id="ScriptManager1" runat="server" EnablepageMethods="true">
        <Services>
            <asp:ServiceReference Path="AutoComplete.asmx" />
        </Services>
        </asp:ScriptManager>

    <cc2:AutoCompleteExtender
         runat="server" 
         ID="AutoCompleteExtender1" 
         ServicePath="AutoComplete.asmx" 
         ServiceMethod="AutoComplete2" 
         MinimumPrefixLength="1" 
         CompletionSetCount="12" 
         TargetControlID="TextBox3" 
         EnableCaching="True" >
     </cc2:AutoCompleteExtender>

<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>

AutoComplete.asmx:

<%@ WebService Language="C#" CodeBehind="~/App_Code/AutoComplete.cs" Class="AutoComplete" %>

AutoComplete.cs:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Script.Services;
using System.Web.Services.Protocols;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;


/// <summary>
/// Summary description for AutoComplete
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class AutoComplete : System.Web.Services.WebService {

    public AutoComplete () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    [ScriptMethod]
    public string[] AutoComplete2(string prefixText,int count)
    {
        string conString = ConfigurationManager.ConnectionStrings["DB"].ConnectionString;
        SqlConnection connection = new SqlConnection(conString);
        connection.Open();
        SqlParameter prm;
        string sql = "Select program_name FROM CM_Programs WHERE program_name LIKE @prefixText";
        SqlDataAdapter cmd = new SqlDataAdapter(sql, connection);
        prm = new SqlParameter("@prefixText", SqlDbType.VarChar, 50);
        prm.Value = prefixText+ "%";
        cmd.SelectCommand.Parameters.Add(prm);
        DataTable dt = new DataTable();
        cmd.Fill(dt);
        string[] items = new string[dt.Rows.Count];
        int i = 0;
        foreach (DataRow dr in dt.Rows)
        {
            items.SetValue(dr["program_name"].ToString(),i);
            i++;
        }
        connection.Close();
        return items;
    } 
}

Ответы [ 2 ]

1 голос
/ 08 апреля 2009

Попробуйте поиграться со свойством CompletionInterval. Я использовал этот элемент управления в прошлом и не видел ожидаемого поведения, пока не установил значение CompletionInterval в гораздо более низкое значение. По умолчанию он равен 1000 (мс), я бы дал ему снимок со значением 1, просто чтобы посмотреть, все ли работает как надо (и шаги womp должны помочь сузить место возникновения проблем со связью) и если это произойдет работайте, продолжайте увеличивать значение, пока не достигнете значения, которое имеет смысл (1 мс отправляет много запросов на сервер). Сообщите о том, что работает, а что нет.

1 голос
/ 08 апреля 2009

«Ничего не происходит» - нелегкое описание. Когда вы говорите, что ничего не происходит, вы проверяли, что

  • Код сервера используется для веб-сервис?
  • Ваш запрос выполняется и возвращать результаты?
  • Ваш массив предметов заполняется правильно?

Если «ничто» не означает, что ничего из вышеперечисленного не происходит, я бы начал проверять, что на странице нет ошибок javascript и что ваш расширитель автозаполнения правильно отображает (проверьте элементы управления страницы в трассировке).

...