撕掉我的头发 - ASP.Net AJAX AutoComplete无法正常工作

时间:2009-08-20 14:32:28

标签: c# asp.net-ajax autocomplete

希望有人可以帮忙解决这个问题。我一直在网络上,并通过这个网站寻找答案,但仍然无法使Autocomplete AJAX控件工作。我试图将它包含在一个现有的网站中,直接将其剥离回一个非常基本的形式,但它仍然无法运行。我使用页面方法而不是本地Web服务有更多的运气,所以这是我的代码

<%@ 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中它只是说“UNDEFINED”一直到列表中。

我目前正在使用Visual Web Developer 2008,这是在Localhost上运行的。我想我已经筋疲力尽了所有可以找到的“试试这个...”选项,从添加[ScriptMethod]到改变Web.Config中的内容。

此代码有什么明显错误吗?

只有可能产生影响的其他事情在Global.asax我做一个Context.RewritePath来重写URL - 这对AJAX有什么影响吗?

感谢您提供任何帮助。

7 个答案:

答案 0 :(得分:6)

我认为您还需要将您的页面名称包含在servicePath中。

    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
            MinimumPrefixLength="1" ServiceMethod="getResults" ServicePath="droptest.aspx" 
            TargetControlID="TextBox1">
    </cc1:AutoCompleteExtender>

答案 1 :(得分:2)

尝试将ServicePath添加到cc1:AutoCompleteExtender以及Web服务的路径。

答案 2 :(得分:1)

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

确保包含ScriptMethod属性。

答案 3 :(得分:0)

制作方法static

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

更新

在黑暗中拍摄...尝试移动文本框上方的ScriptManager。另外,我会将ServicePath设置为“~/”,因为您提到了网址重写。

答案 4 :(得分:0)

是的,我从这些建议中添加了一些内容!虽然仍然存在问题,但它可以在一个独立的项目中运行,但是将其添加回现有项目中并且它不能再次运行。所以感谢到目前为止的帮助,我有一个工作的例子,只需要弄清楚现在正在其他项目中杀死它的是什么。

答案 5 :(得分:0)

如果您使用的是IIS 5.1,请尝试从应用程序设置中临时删除。*。此通配符设置可防止类似AJAX的控件正常工作。

答案 6 :(得分:0)

就我而言,我的项目使用重写规则删除扩展名aspx。我的问题是。我评论了web.config中的重写规则。然后清除解决方案。重建它。清除Firefox / Chrome(使用的方式)中的所有历史记录。然后按Ctrl + F5或F5。自动完成功能会正确显示。