ASP.NET AJAX AutoComplete不调用代码隐藏

时间:2015-07-24 13:05:08

标签: c# asp.net ajax autocompleteextender

(在将此问题标记为重复之前,我已经尝试了所有其他问题,其中大多数都有过时的链接而且无法解决我的问题)

我正在尝试创建一个简单的自动完成功能,但从不调用Code-Behind。

的Login.aspx:

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>
    <asp:TextBox ID="TextBox1" runat="server" autofocus="autofocus"></asp:TextBox>
    <cc1:AutoCompleteExtender ID="ACE" runat="server" ServiceMethod="GetCompletionList" 
                              ServicePath="~/App_Code/Common.cs" 
                              TargetControlID="TextBox1" 
                              MinimumPrefixLength="1" 
                              CompletionSetCount="10" >
    </cc1:AutoCompleteExtender>
</form>

Common.cs:

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetCompletionList(string prefixText, int count)
{
    return new string[] { "test1", "test2", "test3" }
}

1 个答案:

答案 0 :(得分:1)

不幸的是,您不能在.cs类文件中使用ASP.NET AJAX页面方法,除非它派生自Page类或派生自另一个派生自Page类的类(Page类必须位于继承层次结构中)。这就是你不能在ASP.NET母版页中使用ASP.NET AJAX页面方法的原因,因为它们继承自MasterPage类,它不属于Page类继承层次结构。

您至少有2个选项:

1)将GetCompletionList方法放在代码隐藏文件Login.aspx.cs中,然后可以省略自动完成扩展程序标记中的ServicePath属性。

2)创建一个Common.aspx页面,该页面将包含可以在应用程序的各个页面中使用的ASP.NET AJAX页面方法。由于此.aspx文件中的唯一内容是static页面方法,如果用户导航到该页面,则不会呈现任何内容,但它确实会导致混淆某些不知道ASP.NET AJAX页面的人方法是并且认为他们应该删除空白页面。如果用户以某种方式在您的应用程序的地址栏中键入该URL,也可能会让您感到困惑。

现在,您可以让自动完成扩展程序的ServicePath属性指向Common.aspx中的页面方法,如下所示:

ServicePath="Common.aspx"

注意:您可以在.aspx页面上调用ASP.NET AJAX页面方法,这样就可以使Common.aspx方法可用。