如何让我的自动填充扩展器工作?

时间:2008-11-23 09:08:41

标签: asp.net asp.net-ajax autocompleteextender

我试着在我的代码中搜索错误,但我不能让自动完成扩展器工作。把招工广告。

这是我的代码:(摘自我的aspx页面)

  <asp:TextBox ID="TextBox1" Width="120px" runat="server"></asp:TextBox>
    <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="TextBox1" ServiceMethod="GetCompletionList" ServicePath="SearchAutoComplete.asmx" MinimumPrefixLength="1">
    </cc1:AutoCompleteExtender> 

我的Web服务代码:

 [WebMethod]
    public static string[] GetCompletionList(string prefixText, int count)
    {
        List<string> returnData = new List<string>();
        MySqlConnection con = new MySqlConnection(Connection.ConnectionString());
        string sql = "select title from blog where title like '%" + prefixText + "%'";
        MySqlCommand cmd = new MySqlCommand(sql, con);
        con.Open();
        MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        while (reader.Read())
        {
            returnData.Add(reader["title"].ToString());
        }
        return returnData.ToArray();
    }

6 个答案:

答案 0 :(得分:2)

如何解决此问题:

注释掉你的SQL代码。只需返回包含一些测试数据的数组。那样有用吗?你看到了吗?如果没有,您的Web服务代码不会被调用。如果可行,那么您的问题在于您的数据库代码....您的Web服务代码是否在调用页面上?

答案 1 :(得分:2)

除了GetCompletionList方法被错误地声明为static之外,它还需要有两个属性; [System.Web.Services.WebMethod][System.Web.Script.Services.ScriptMethod]

所以你的声明应该是这样的:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(string prefixText, int count) { ...

此外,您的服务类应具有以下属性:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]

如果GetCompletionList方法抛出异常,自动完成扩展程序也会被破坏。为防止出现这种情况,您应该在函数

的代码周围添加try..catch
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(string prefixText, int count)
{
    List<string> returnData = new List<string>();

    try
    {
        // database access code that sets returnData
    }
    catch (Exception ex)
    {
        // log the exception
    }

    return returnData.ToArray();
}

答案 2 :(得分:1)

我认为您的问题是GetCompletionList方法已声明为static

如果在调试器会话中仅运行.asmx代码(或者如果已将代码部署到Web服务器,则浏览到.asmx文件),您应该看到Web服务的可用操作列表。当我更改Ajax控件工具包示例中的代码以将此方法声明为静态时,操作不再在列表中,并且自动完成扩展器也会停止工作。

将您的方法签名更改为:

public string[] GetCompletionList(string prefixText, int count) 

答案 3 :(得分:1)

在ScriptManager中添加对此Web服务的引用,如下所示

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

请参阅以下链接以获取更多信息

Ajax AutoComplete textbox in gridview

答案 4 :(得分:1)

首先,从Web方法声明中删除“static”。 其次是在你的

中添加EnableCaching =“true”CompletionSetCount =“20”
      <cc1:AutoCompleteExtender  

      </cc1:AutoCompleteExtender> 

代码块。 希望这能解决你的问题。

答案 5 :(得分:1)

创建Web服务时,顶部有一行说:

  

'允许使用ASP.NET从脚本调用此Web Service   AJAX,取消注释以下行。

'<System.Web.Script.Services.ScriptService()> _
<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _

取消注释该行:

<System.Web.Script.Services.ScriptService()> _

在Visual Studio 2010中发生了这种情况。