我试着在我的代码中搜索错误,但我不能让自动完成扩展器工作。把招工广告。
这是我的代码:(摘自我的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();
}
答案 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>
请参阅以下链接以获取更多信息
答案 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中发生了这种情况。