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

时间:2015-06-01 20:15:18

标签: c# asp.net autocompleteextender

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

  

“可调用页面方法是公共静态(或在VisualBasic®中共享)   .NET)方法在codebehind类中定义并用   与Web服务方法相同的WebMethod属性。现在,   这仅限于ASPX页面 - 内联代码和代码隐藏代码 - 但是   可能会在将来扩展到用户控件和自定义控件。“

此外,偶然发现其他论坛建议使用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(第I页称为用户控件)和CreateEdit.ascx(用户控制它自己)和没人工作。

这是网络方法:

[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)错误它从未命中。 任何解释都会很好,谢谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我将WebMethod放在网页上,并用它来调用UserControl上的方法。