我无法让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。任何有关这方面的帮助将不胜感激。
问候!
答案 0 :(得分:2)
你的代码应该是这样读的
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static string[] GetCompletionList prefixText, int count, string contextKey)
{....}
此外,如果您使用的是pagescript方法,则无需为ajax扩展程序提供servicepath属性。
答案 1 :(得分: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)
{
...
}
答案 2 :(得分: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));
}
答案 3 :(得分:1)
您的代码几乎是正确的。唯一的问题是服务路径不应该以.aspx.cs结尾,而只能以.aspx结尾。如果扩展程序与方法位于同一页面上,则省略服务路径
答案 4 :(得分:1)
我也遇到过同样的问题。我知道这有点晚了,但迟到总比没有好......
以下是最终为我设置的设置(包含您的ID和名称):
Code-Behind(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服务的路径 扩展器将拉出单词\句子 来自的完成。如果不是这样的话 提供,服务方法应该是 页面方法。
在AutoComplete Reference Page中解释。你已经在你的Code-Behind中定义了你的GetCompletionList()方法,我现在假设它被称为“页面方法”。因此,如果我们将方法放在不同的位置(例如services.cs或类似的东西),您似乎只会使用Path属性。
答案 5 :(得分:0)
删除方法声明中的static
关键字。
答案 6 :(得分:0)
您可能缺少指定 AutoCompleteExtender 的 MinimumPrefixLength 参数。
答案 7 :(得分:0)
将TextBox的自动回发属性设置为TRUE
答案 8 :(得分:-1)
Ajax自动完成使用服务调用,因此您可以在aspx.cs文件中使用以下代码,注意System.Web.Services.WebMethodAttribute()
属性,这将使该方法可用于服务调用。
或者,您可以使用任何ASMX service或WCF service进行广泛而可靠的服务使用。
[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);
}