【问题标题】:WebMethod not being called. ASP.NET C#未调用 WebMethod。 ASP.NET C#
【发布时间】:2011-08-08 17:10:59
【问题描述】:

我遵循了一个非常简单的使用 ajax 的自动完成示例,但无法让我的工作。我一步一步扔了代码,看起来它永远不会进入我的网络方法。还有什么要检查的?

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

我创建了一个 Web 服务来使用,而不是将我的方法直接放在类中,但我得到了相同的结果。

【问题讨论】:

  • 您的网络方法是静态的吗?只有在页面内时它才能是静态的。

标签: c# asp.net web-services


【解决方案1】:
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”,名称为 您的选择,但返回类型和 参数名称和类型必须准确 匹配,包括大小写。

【讨论】:

  • 好的,我把它改成了 contextKey,但它仍然不能调用它/工作。在单步执行过程中不应该至少跳转到方法吗?
  • 好的,我刚刚删除了整个字符串 contextKey,它现在可以工作了。谢谢
  • 不客气,如果您将“UseContextKey”和“ContextKey”属性都添加到 AutoCompleteExtender 控件,包含“string contextKey”的功能应该可以工作。
【解决方案2】:

您的脚本管理器似乎没有配置为允许页面方法,但您的“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>

我认为您只是尝试将这两种技术融合在一起,结果只是有点偏离。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2015-11-26
    • 2013-10-05
    • 2021-01-31
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多