ASP.NET AJAX 自动完成不调用代码隐藏
ASP.NET AJAX AutoComplete not calling 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" }
}
遗憾的是,您不能在 .cs
class 文件中使用 ASP.NET AJAX 页面方法,除非它派生自 Page
class 或派生自另一个派生自 Page
class 的 class(Page
class 必须在继承层次结构中)。这就是您不能在 ASP.NET 母版页中使用 ASP.NET AJAX 页面方法的原因,因为它们继承自 MasterPage
class,这不是Page
class 继承层次结构。
您至少有 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.NETAJAX个页面方法,这就是允许这个Common.aspx
方法可用。
(在将此问题标记为重复之前,我已经尝试了所有其他问题,其中大多数链接已过时且无法解决我的问题)
我正在尝试制作一个简单的自动完成功能,但从未调用代码隐藏。
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" }
}
遗憾的是,您不能在 .cs
class 文件中使用 ASP.NET AJAX 页面方法,除非它派生自 Page
class 或派生自另一个派生自 Page
class 的 class(Page
class 必须在继承层次结构中)。这就是您不能在 ASP.NET 母版页中使用 ASP.NET AJAX 页面方法的原因,因为它们继承自 MasterPage
class,这不是Page
class 继承层次结构。
您至少有 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.NETAJAX个页面方法,这就是允许这个Common.aspx
方法可用。