1

我无法让 AJAX CT 自动完成功能工作。问题是当我开始在文本框中写入时,什么也没有发生。我遇到的第一个问题是当我尝试添加自动完成页面方法时出现错误:“无法创建页面方法“GetCompletionList”...”。然后我尝试手动创建它,但仍然没有任何反应。

这是 AdministracijaOsoba.aspx 代码:

<asp:TextBox ID="txtOsoba" runat="server"></asp:TextBox><asp:AutoCompleteExtender
                    ID="AutoCompleteExtender1" runat="server" ScriptPath="" 
                    ServiceMethod="GetCompletionList" ServicePath="AdministracijaOsoba.aspx.cs" 
                    TargetControlID="txtOsoba" UseContextKey="True">
                </asp:AutoCompleteExtender>

这是 AdministracijaOsoba.aspx.cs 代码:

public static string[] GetCompletionList(string prefixText, int count, string contextKey)
    {
        PravosudnaAkademijaEntities db = new PravosudnaAkademijaEntities();

        var osoba = from o in db.osobas
                    orderby o.osoba_prezime
                    select new { o.osoba_id, person = o.osoba_prezime + " " + o.osoba_ime };

        string[] main = new string[0];

        foreach (var o in osoba)
        {
            if (o.person.StartsWith(prefixText))
            {
                Array.Resize(ref main, main.Length + 1);
                main[main.Length - 1] = o.person.ToString();

                if (main.Length == 15)
                {
                    break;
                }
            }
        }

        Array.Sort(main);
        return main;
    }

请注意我正在使用 LINQ to Entities。对此的任何帮助将不胜感激。

问候!

4

9 回答 9

2

你后面的代码应该是这样的

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetCompletionList prefixText, int count, string contextKey)
{....}

此外,如果您使用的是 pagescript 方法,则无需为您的 ajax 扩展器提供 servicepath 属性。

于 2011-06-12T18:55:22.003 回答
1

将您的声明更改为:

<asp:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" 
    ServiceMethod="GetCompletionList" 
    ServicePath="AdministracijaOsoba.aspx/GetCompletionList" 
    TargetControlID="txtOsoba" UseContextKey="True">

将此添加到您的 AdministracijaOsoba.aspx.cs 代码中:

[WebMethod]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
  ...
}
于 2011-03-06T02:41:48.183 回答
1

Your code is almost right. The only problem is that the service path shouldnt end with .aspx.cs but only .aspx. If the extender is on the same page as the method then leave out servicepath

于 2011-04-01T07:27:52.143 回答
1

这是我在我的 aspx 页面中的内容:

<asp:AutoCompleteExtender ID="tbSearchName_AutoCompleteExtender" runat="server" 
  DelimiterCharacters="" Enabled="True" ServicePath="" 
  TargetControlID="tbSearchName" ServiceMethod="GetCompletionList" 
  UseContextKey="True" MinimumPrefixLength="2">
</asp:AutoCompleteExtender>

在我的页面后面的代码中,我有:

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
  ArrayList testList = new ArrayList();
  ...
  return (string[])testList.ToArray(typeof(string));
}
于 2011-03-16T05:07:43.557 回答
1

我也一直有同样的问题。我知道这有点晚了,但迟到总比没有好......

这是最终对我有用的设置(使用您的 ID 和名称):

代码隐藏(aspx.cs):

    [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethod()]
    public static string[] GetCompletionList(string prefixText, int count, string contextKey)
    {
        ...
    } 

代码( .aspx ):

    <asp:TextBox ID="txtOsoba" runat="server"></asp:TextBox>
    <asp:AutoCompleteExtender ID="AutoCompleteExtender1" 
        runat="server"
        ServiceMethod="GetCompletionList"
        TargetControlID="txtOsoba"  
        UseContextKey="True">
    </asp:AutoCompleteExtender>

如您所见,您不需要设置 ScriptPath 和 ServicePath 属性,因为这些属性代表...

扩展器将从中提取单词\句子完成的 Web 服务的路径。如果没有提供,服务方法应该是页面方法

自动完成参考页中对此进行了说明。你已经在你的代码隐藏中定义了你的 GetCompletionList() 方法,我目前假设它符合“页面方法”的条件。因此,如果我们将方法放在不同的位置(例如 services.cs 或类似的东西),您似乎只会使用 Path 属性。

于 2011-06-22T20:58:05.260 回答
0

删除static方法声明中的关键字。

于 2011-05-07T10:08:25.343 回答
0

将 TextBox 的自动回发属性设置为 TRUE

于 2014-03-11T06:50:56.063 回答
0

也许您缺少指定AutoCompleteExtender的MinimumPrefixLength参数。

于 2012-04-13T10:53:00.357 回答
-1

Ajax 自动完成使用服务调用,因此您可以在您的 aspx.cs 文件中使用以下代码,注意System.Web.Services.WebMethodAttribute()属性,这将使服务调用可以访问该方法。

或者,您可以使用任何ASMX 服务WCF 服务来进行广泛且可靠的服务使用。

[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
public static List<string> GetCompletionList(string prefixText, int count, string contextKey)
{
    return UserControls_phonenumbersearch.GetCompletionList(prefixText, count, contextKey);
}
于 2015-06-25T06:05:14.643 回答