Рву на себе волосы - ASP.Net AJAX AutoComplete не работает

Надеюсь, кто-то может помочь с этим. Я был в Интернете и на этом сайте в поисках ответа, но до сих пор не могу заставить работать элемент управления Autocomplete AJAX. Я перешел от попыток включить его в существующий сайт к удалению его обратно в очень простую форму, и он все еще не работает. Мне немного больше повезло с использованием методов страницы, а не локального веб-сервиса, так что вот мой код

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="droptest.aspx.cs" Inherits="droptest" %>
<%@ 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></title>
</head>
<body>  
    <form id="form1" runat="server">    
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server">
        </asp:ScriptManager>
        <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
            MinimumPrefixLength="1" ServiceMethod="getResults" 
            TargetControlID="TextBox1">
        </cc1:AutoCompleteExtender>
    </form>
</body>
</html>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Script.Services;
using System.Web.Services;

public partial class droptest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public string[] getResults(string prefixText, int count)
    {
        string[] test = new string[5] { "One", "Two", "Three", "Four", "Five" };
        return test;
    }
}

Пытался сделать все как можно проще, но все, что я получаю, это либо раскрывающийся список автозаполнения с источником страницы (начиная с <! doctype...) буква за буквой, либо в IE7 он просто говорит «НЕОПРЕДЕЛЕНО» весь вниз по списку.

На данный момент я использую Visual Web Developer 2008, он работает на Localhost. Я думаю, что я исчерпал все варианты «Попробуйте это ...», которые я могу найти, от добавления в [ScriptMethod] до изменения вещей в Web.Config.

Есть ли что-то явно неправильное в этом коде?

Единственная другая вещь, которая может иметь эффект, находится в Global.asax. Я делаю Context.RewritePath для перезаписи URL-адресов - влияет ли это на AJAX?

Спасибо за любую помощь, которую вы можете дать.


person Dave    schedule 20.08.2009    source источник


Ответы (7)


Я думаю, вам также нужно указать имя своей страницы в качестве servicePath.

    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
            MinimumPrefixLength="1" ServiceMethod="getResults" ServicePath="droptest.aspx" 
            TargetControlID="TextBox1">
    </cc1:AutoCompleteExtender>
person Jason    schedule 20.08.2009
comment
Это использует PageMthods, поэтому я подумал, что вам нужно исключить ServicePath, это только для WebServices - попробовал и все равно получил проблему - person Dave; 20.08.2009
comment
Я также использую методы страницы, и мне нужен путь службы. Был ли у вас одновременно определен путь службы, метод, определенный как статический, и атрибут ScriptMethod? Этот элемент управления автозаполнением довольно специфичен. - person Jason; 20.08.2009

Попробуйте добавить ServicePath в cc1:AutoCompleteExtender с путем к веб-службе.

person Demetri    schedule 20.08.2009
comment
Это использует PageMethods, поэтому я подумал, что вам нужно исключить ServicePath, это только для WebServices - попробовал и все равно получил проблему - person Dave; 20.08.2009

[WebMethod, ScriptMethod]
public string[] getResults(string prefixText, int count)
{

не забудьте включить атрибут ScriptMethod.

person Ben Lesh    schedule 20.08.2009

Правильно, что-то, что я добавил из этих предложений, сработало!!! Однако все еще есть проблема, она работает в автономном проекте, но добавляет ее обратно в существующий проект, и она снова не работает. Так что спасибо за помощь, у меня есть рабочий пример, просто нужно выяснить, что его убивает внутри другого проекта.

person Dave    schedule 20.08.2009
comment
Я сузил его - именно Context.Rewrite в Global.asax вызывает проблему. Теперь вопрос в том, как мне обойти это... - person Dave; 20.08.2009
comment
Я добавил некоторый код в Global.asax, который переписывает URL-адрес только в том случае, если он имеет расширение файла, отличное от .axd. Поэтому, если у него есть .aspx или что-то еще в соответствии с правилами перезаписи, он проверяется и перезаписывается, если нет, он остается в покое. Все равно спасибо всем за помощь... - person Dave; 20.08.2009

Сделайте метод static:

[WebMethod]
public static string[] getResults(string prefixText, int count)
{
        string[] test = new string[5] { "One", "Two", "Three", "Four", "Five" };
        return test;
}

Обновлять:

Снимок в темноте... попробуйте переместить ScriptManager над текстовым полем. Кроме того, я бы установил ServicePath на «~/» просто потому, что вы упомянули перезапись URL.

person John Rasch    schedule 20.08.2009
comment
Пробовал и это - все еще просто получаю Doctype и остальную часть исходного кода буква за буквой в результатах ... У меня есть ajax UpdatePanels, работающие в другом месте на сайте, поэтому я знаю, что это нормально, это просто эта вещь из набора инструментов - person Dave; 20.08.2009
comment
Попробуйте поставить точку останова в WebMethod и посмотреть, сработает ли она. - person John Rasch; 20.08.2009
comment
Когда я пробовал локальный веб-сервис вместо PageMethods, я тоже не мог заставить их запускаться, даже тестирование .asmx с помощью кнопки Invoke просто зависало в браузере - возможно ли, что существует более серьезная проблема с разрешениями или что-то в этом? - person Dave; 20.08.2009

Если вы используете IIS 5.1, попробуйте временно удалить .* из настроек приложения. Этот параметр подстановки предотвращает правильную работу элемента управления, подобного AJAX.

person Roan    schedule 15.10.2009

В моем случае мой проект использует правило перезаписи для удаления расширения aspx. Я думаю проблема в том. Я комментирую правило перезаписи в web.config. Затем прозрачный раствор. Восстановите его. Очистите всю историю в firefox/chrome (то, что вы используете). Затем Ctrl+F5 или F5. Автозаполнение показывает корректно.

person Liudi Wijaya    schedule 24.01.2019