2

我已经尝试在我的代码中搜索错误,但我自己无法让自动完成扩展器工作。把招工广告。

这是我的代码:(摘自我的 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> 

我的网络服务代码:

 [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();
    }
4

6 回答 6

2

如何解决此问题:

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

于 2008-11-23T16:55:03.407 回答
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();
}
于 2008-11-24T13:16:31.100 回答
1

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

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

将您的方法签名更改为:

public string[] GetCompletionList(string prefixText, int count) 
于 2008-11-23T20:45:28.340 回答
1

像这样在 ScriptManager 中添加对 Web 服务的引用

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

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

gridview中的Ajax自动完成文本框

于 2009-07-01T06:00:21.667 回答
1

首先,从 Web 方法声明中删除“静态”。其次是在你的添加 EnableCaching="true" CompletionSetCount="20"

      <cc1:AutoCompleteExtender  

      </cc1:AutoCompleteExtender> 

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

于 2012-01-13T10:55:51.030 回答
1

当你创建一个 Web 服务时,在顶部有一行写着:

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

'<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 中发生在我身上。

于 2013-06-12T23:04:39.610 回答