我正在努力让AjaxControlToolkit(ACT)自动完成扩展器工作。 它工作得很短暂,但现在已停止工作,我无法弄清楚原因。我没有改变我的项目中的任何改变,我可以看到会影响这一点。
我甚至创建了一个全新的VS2013项目并试图实现这一点,但仍然没有乐趣。
我看到几个对“ajaxToolkit:ToolkitScriptManager”的引用,但我无法在任何地方找到它的引用。我已尝试从下载以及通过NUGET安装工具包,但它根本无法工作。
我已经尝试过这里的每个例子,其中至少有20个或更多,但仍然没有快乐。如果你有它工作,请发布你的代码,因为我的工作不起作用,它的无意义发布是因为我已经尝试了所有建议在这里
任何帮助都会非常感激,因为我真的不想设计一些不优雅的东西来解决这个问题。
感谢加载
[UPDATE] ToolkitScriptManager已从ACT 15.1中移除,请参阅here以便回答此问题,但自动完成仍无法正常工作
[UPDATE]
这是我放置的一个例子,无论有没有[System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
指令
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TestWebSite.WebForm1" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ServiceMethod="GetCompletionList"
MinimumPrefixLength="1"
CompletionInterval="100"
ID="AutoCompleteExtender1"
runat="server"
TargetControlID="TextBox1"></cc1:AutoCompleteExtender>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace TestWebSite
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
public static string[] GetCompletionList(string prefixText, int count, string contextKey)
{
string[] s = {"a","b","c","d"};
return s;
}
}
}
答案 0 :(得分:1)
您需要通过在@PageDirective
下面放置以下行来注册AJAX Control Toolkit库这是ajaxtoolkit
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
然后这是调用ajaxtoolkit
的示例<cc1:toolkitYouWantToUse/>
感谢它
答案 1 :(得分:0)
好的,我有它的工作。我在VS2013中创建了一个全新的测试项目。我使用谷歌浏览器的开发人员功能进行调试,发现我经常遇到500错误。根据我的经验,我通常会因为我的网址错误而导致这种情况,这导致我检查网络服务是否正常工作。 (见下文)
在解决了这个问题并且知道Web服务正常后,我进行了一些试验和错误,下面的步骤解决了这个问题。我现在使用相同的方法在我的所有项目中使用AutoCompleteExtender。
(这可能不是这样做但我知道它对我有用)
使用如下定义的WebMethod将.asmx文件添加到项目中。您实际上可以调用方法任何您喜欢的配置文件名称(例如参数和返回类型)必须保持不变。可能还有其他变化,但我不知道它们是什么。我只知道这个配置对我有用。
重新添加AutoCompleteControl。 VS IDE将为您添加@Register指令
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<cc1:AutoCompleteExtender ServiceMethod="GetCompletionList"
ServicePath="WebService1.asmx"
MinimumPrefixLength="0"
CompletionInterval="100"
ID="AutoCompleteExtender1"
runat="server"
TargetControlID="TextBox1"></cc1:AutoCompleteExtender>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace TestWebSite
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
[WebMethod]
public string[] GetCompletionList(string prefixText, int count)//, string contextKey)
{
string[] s = { "a", "b", "c", "d" };
return s;
}
}
}
//List<string> works just as well as string[]