我使用了一个非常简单的使用ajax进行自动完成的示例,无法让我的工作。我踩了代码,看起来它永远不会进入我的webmethod。还有什么可以检查的?
的.aspx
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:TextBox ID="txtFrom" runat="server">
</asp:TextBox>
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtFrom" MinimumPrefixLength="1" ServiceMethod="GetSuggestions">
</ajaxToolkit:AutoCompleteExtender>
.aspx.cs
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetSuggestions(string prefixText, int count, string contextKey)
{
string[] members = { "Nick", "John", "Bob" };
return (from m in members where m.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) select m).Take(count).ToArray();
}
我创建了一个webservice来代替将我的方法直接放在类中,但我得到了相同的结果。
答案 0 :(得分:2)
public static string[] GetSuggestions(string prefixText, int count, string contxtKey)
你写了 contxtKey 而不是 contextKey
请记住,签名(类型,参数名称,返回类型)has to match exactly。
如果使用上下文密钥,则应该 与...有相同的签名 附加参数名为contextKey 字符串类型:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCompletionList(
string prefixText, int count, string contextKey) { ... }
请注意,您可以替换 “GetCompletionList”,名称为 你的选择,但返回类型和 参数名称和类型必须完全正确 匹配,包括案例。
答案 1 :(得分:1)
您的scriptmanager似乎没有配置为允许页面方法,但您的“GetSuggestions”是一种页面方法(在.aspx.cs上)而不是服务调用(在.asmx上)。
尝试编辑脚本管理器,如下所示:
<asp:ScriptManager
ID=”scriptManager”
EnablePageMethods=”true”
runat=”server” >
如果要将方法调用移动到.asmx,则应修改AutoCompleteExtender以引用.asmx文件,如下所示:
<ajaxToolkit:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="txtFrom" MinimumPrefixLength="1" ServiceMethod="GetSuggestions" ServicePath="AutoCompleteService.asmx">
</ajaxToolkit:AutoCompleteExtender>
我认为你只是尝试将这两种技术融合在一起并最终结束了。