ASP.NET AJAX 自动完成不调用代码隐藏

本文关键字:调用 代码 隐藏 NET AJAX ASP | 更新日期: 2023-09-27 18:04:24

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

我正在尝试制作一个简单的自动完成函数,但从未调用过代码隐藏。

登录.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>

常见.cs:

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

ASP.NET AJAX 自动完成不调用代码隐藏

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

您至少有 2 个选项:

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

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

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

ServicePath="Common.aspx"

注意:您可以跨.aspx页调用 ASP.NET AJAX 页方法,这允许此Common.aspx方法可用。