如何在用户控件中使用 AutoCompleteExtender?

How to use an AutoCompleteExtender from within a user control?

我创建了一个用户控件,我计划在每次用户编辑某些内容时使用它,并在其中调用用户控件的常规 ASPX 页面。用户控件包含一些文本框和一个 AutoCompleteExtender。除了 Extender,一切正常。我已经在许多其他 APSX 页面中使用过它并且非常有效,但由于某种原因它似乎在这里不起作用。调试后,通过chrome,我发现我无法访问方法(405)。经过几天的清理,互联网,我发现了这个:

"A callable page method is a public static (or Shared in Visual Basic® .NET) method defined in the codebehind class and decorated with the same WebMethod attribute used for Web service methods. At present, this is limited to ASPX pages-both inline and codebehind code-but might be extended in the future to user controls and custom controls."

此外,偶然发现其他论坛建议使用 Web 服务而不是 Web 方法。尝试了这个,仍然得到相同的 (405) 错误。我被困了将近一个星期,运行 别无选择。这是一种不好的做法,这就是为什么你不能这样做的原因吗?我只想将其全部保存在同一个用户控件和 aspx 上。

这就是我在用户控件上使用扩展程序的方式:

<aspx:AutoCompleteExtender ID="tbEntitiesAutoCompleteEx" runat="server"
      BehaviorID="tbEntitiesAutoCompleteEx" TargetControlID="tbEntity"
      UseContextKey="True" ServiceMethod="GetAutocompleteEntities"
      MinimumPrefixLength="3" CompletionSetCount="10" CompletionInterval="300"
      CompletionListCssClass="autoCompleteList"
      CompletionListItemCssClass="autoCompleteItem" 
      CompletionListHighlightedItemCssClass="autoCompleteHighlightedItem"       
      CompletionListElementID="divCodeAutoCompletePlacement"  
      OnClientPopulating="OnEntitiesPopulating" 
      OnClientPopulated="OnEntitiesPopulated" 
      OnClientItemSelected="OnEntitySelected"                                
      ShowOnlyCurrentWordInCompletionListItem="true" 
      FirstRowSelected="true" ServicePath ="~/InterventionsWebService.asmx" />

我已经将服务路径更改为~/InterventionsWebService.asmx(同一目录中的Web服务),CreateEdit.aspx(我调用用户控制的页面)和CreateEdit.ascx(用户控制它自己) 并且 none 有效。

这是网络方法:

[System.Web.Script.Services.ScriptMethod()]
[System.Web.Services.WebMethod]
public List<string> GetAutocompleteEntities(string prefixText, int count, string contextKey)
{
    var bbq = 0

    return new List<string>();
}

我也试过把它变成静态方法,但还是不行。 我在 var bbq = 0 上有一个断点,但由于 (405) 错误它从未命中。 任何解释都会很好,谢谢。

我设法解决了我的问题。我删除了服务路径,将 web 方法放在调用 ascx 的 aspx 中,使 web 方法静态并设法达到断点。

我把WebMethod放在网页上,用它来调用UserControl上的一个方法。