我对ASP.NET中的自动完成扩展程序有一个问题 - 它在我拥有的所有页面中都可以正常工作,但不是在母版页中,我不知道为什么。
这是我的代码:
<asp:TextBox runat="server" ID="txtSearch" Width="200px" CssClass="TextBoxClass"></asp:TextBox>
<cc1:AutoCompleteExtender ID="txtSearch_AutoCompleteExtender" runat="server"
TargetControlID="txtSearch"
CompletionInterval="0"
CompletionListCssClass="autocomplete_completionListElement"
CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"
CompletionListItemCssClass="autocomplete_listItem"
CompletionSetCount="10" EnableCaching="true" MinimumPrefixLength="2"
ServiceMethod="GetCompletionListOggetti"
ShowOnlyCurrentWordInCompletionListItem="true" UseContextKey="True">
</cc1:AutoCompleteExtender>
代码背后:
<System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()> _
Public Shared Function GetCompletionListOggetti(ByVal prefixText As String, ByVal count As Integer) As String()
' Insert code to return a string array here…
Return AutoCompleteOggetti(prefixText)
End Function
问题是永远不会调用GetCompletionListOggetti
。
我再说一遍 - 它在内容页面上运行正常!提前谢谢。
答案 0 :(得分:2)
您需要设置AutoCompleteExtender的 ServicePath 属性,以覆盖回调到加载(非主站)页面的默认行为。
将您的函数添加到Web服务页面(.asmx),虚拟页面或default.aspx等的代码隐藏中。
如果使用网络服务页面,则需要添加/取消注释该行:
<System.Web.Script.Services.ScriptService()> _
用于VB,或用于C#
[System.Web.Script.Services.ScriptService]
答案 1 :(得分:1)
我通过将web方法(在您的情况下,GetCompletionListOggetti)放在内容页面的代码隐藏文件而不是母版页中来管理它。并且它仅适用于文件后面的相同代码中的Web方法,而不是单独的asmx服务。为此,请不要忘记将 EnablePageMethods =“true”属性添加到脚本管理器中。
似乎AutoCompleteExtender的服务方法在用户(或自定义)控件的代码隐藏文件中定义时从不被调用,并且母版页确实是一种控件。
此修复的缺点是您必须在使用此母版页的每个内容页面中放置相同的服务方法。不是很优雅。另一个缺点是某种方式建议下拉列表的CSS不能正常工作。我还是想不通一下。有谁更好主意?