1

申请简介:

我正在创建一个具有母版页、子母版页和一些内容页的网站。

我创建了一些用户控件来在主母版页上显示信息。我已经直接在我的主页上注册了这些控件并指定了它们的位置。

我在 ContentPlaceHolder 中使用了一些内容页面和其他母版页。

描述:

我的一个用户控件上有一个文本框,我想将其与 AutoCompleteExtender 一起使用,通过向用户显示相关结果来帮助用户找到特定的文本。

这是示例代码:

<asp:TextBox ID="TxtSource" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender
    ID="AutoCompleteSource" 
    TargetControlID = "TxtSource"
    MinimumPrefixLength="1"
    ServiceMethod="GetSourceList" 
    runat="server" UseContextKey="True">
</asp:AutoCompleteExtender>

自定义控件背后的代码:

[System.Web.Services.WebMethod(), System.Web.Script.Services.ScriptMethod()]
public static string[] GetSourceList(string prefixText, int count, string contextKey)
{
    string[] SourceList = {"Star Wars", "Star Trek", "Superman", "Memento", "Shrek", "Shrek II"};  

    return (from m in SourceList where m.StartsWith(prefixText.ToUpper()) select m).ToArray(); 
}

我没有使用网络服务,而是使用代码隐藏来调用该方法。

问题:

代码隐藏中的函数永远不会被调用。

我知道我必须将函数保留在 aspx 文件中,但运气不好,我没有在 aspx 文件上添加控件,而是在主文件上添加控件,并且母版页再次被视为控件而不是页面。

一种解决方案:

我可以在每个内容页面上添加自定义控件。

问题 :

1)没有我想要实现的代码可重用性。

2) 页面布局将被更改。

是否有任何其他解决方案,代码更改最少?

4

1 回答 1

0

尝试设置自动完成扩展器的 ServicePath。

<asp:TextBox ID="TxtSource" runat="server"></asp:TextBox>
<asp:AutoCompleteExtender
    ID="AutoCompleteSource" 
    TargetControlID = "TxtSource"
    MinimumPrefixLength="1"
    ServiceMethod="GetSourceList"
    ServicePath="yourpage.cs" 
    runat="server" UseContextKey="True">
</asp:AutoCompleteExtender>
于 2013-07-25T10:07:51.153 回答