Вырвать мои волосы - ASP.Net AJAX AutoComplete не работает - PullRequest
2 голосов
/ 20 августа 2009

Надеюсь, кто-то может помочь с этим. Я бродил по Интернету и через этот сайт в поисках ответа, но все еще не могу заставить работать элемент управления 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?

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

Ответы [ 7 ]

6 голосов
/ 20 августа 2009

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

    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
            MinimumPrefixLength="1" ServiceMethod="getResults" ServicePath="droptest.aspx" 
            TargetControlID="TextBox1">
    </cc1:AutoCompleteExtender>
2 голосов
/ 20 августа 2009

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

1 голос
/ 20 августа 2009
[WebMethod, ScriptMethod]
public string[] getResults(string prefixText, int count)
{

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

0 голосов
/ 24 января 2019

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

0 голосов
/ 15 октября 2009

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

0 голосов
/ 20 августа 2009

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

0 голосов
/ 20 августа 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.

...