包含User Control with AutoCompleteExtender的母版页

时间:2013-07-25 08:40:21

标签: c# asp.net .net ajax

申请摘要:

我正在创建一个包含母版页,子母版页和一些内容页的网站。

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

我在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)页面布局将被更改。

可以有任何其他解决方案,代码更改最少吗?

1 个答案:

答案 0 :(得分: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>