【发布时间】:2012-12-22 02:38:50
【问题描述】:
所以我现在花了 4 天时间研究和尝试在 StackOverflow 和其他网站上可以找到的所有内容。而且我只是无法让我的 Ajax AutoCompleteExtender 工作。我正在为 .NET 4.5 使用 VS 2012 和 ASP.NET 和 C# 构建 这是我的代码:
~/Dashboard/Default.aspx
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolKit" %>
<ajaxToolKit:ToolkitScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Dashboard/AutoComplete2.asmx" />
</Services>
</ajaxToolKit:ToolkitScriptManager>
<asp:TextBox ID="CarMake_TextBox" runat="server"></asp:TextBox>
<ajaxToolKit:AutoCompleteExtender
ID="CarMake_AutoCompleteExtender" runat="server"
Enabled="true"
ServicePath="AutoComplete2.asmx"
ServiceMethod="GetCarMakeList"
TargetControlID="CarMake_TextBox"
MinimumPrefixLength="1" FirstRowSelected="True"
>
</ajaxToolKit:AutoCompleteExtender>
</asp:Content>
~/Dashboard/AutoComplete2.asmx.cs (C#)
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace CDC.Dashboard
{
/// <summary>
/// Summary description for AutoComplete2
/// </summary>
[WebService(Namespace = "http://websiteleaders.com/")]
[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 AutoComplete2 : System.Web.Services.WebService
{
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] GetCarMakeList(string prefixText, int count)
{
string sql = "Select DISTINCT Make from Car_Makes_Models Where Make LIKE @prefixText";
SqlDataAdapter da = new SqlDataAdapter(sql, "Data Source=localhost\\SQLEXPRESS;Initial Catalog=CDC;Integrated Security=True");
da.SelectCommand.Parameters.Add("@prefixText", SqlDbType.VarChar, 50).Value = prefixText + "%";
DataTable dt = new DataTable();
da.Fill(dt);
string[] items = new string[dt.Rows.Count];
int i = 0;
foreach (DataRow dr in dt.Rows)
{
items.SetValue(dr["Make"].ToString(), i);
i++;
}
return items;
}
}
}
我这辈子都无法让它发挥作用。当我尝试通过 Web 浏览器运行 Web 服务并输入值时,它会正确检索所需的信息并将它们作为字符串数组返回。但似乎 AutoCompleteExtender 只是没有触发。
值得注意的是,我第一次尝试时,它成功了。然后在任何后续尝试之后它没有。我傻眼了。如果我用 IE 运行它,我会收到关于使用 AJAX ScriptManager(我已经在使用)和 4.0 脚本的错误消息。我正确安装并引用了 AJAX 工具包,是的,它确实支持 .NET v4.5,这是我的目标框架。
【问题讨论】:
-
您是否尝试过从 firebug 的网络控制台检查 ajax 日志或者可能是 fiddler ? (所以您可能知道问题出在后台进程或客户端 js 中,否则......)
-
@Harsh 我同时使用了 Fiddler 和 Firebug,从控制台我得到 2 个错误:
Error: AjaxControlToolkit requires ASP.NET Ajax 4.0 scripts. Ensure the correct version of the scripts are referenced. If you are using an ASP.NET ScriptManager, switch to the ToolkitScriptManager in AjaxControlToolkit.dll.和TypeError: Sys.Extended is undefined正如你所看到的,我正在使用 AJAX ToolKitScriptManager。我已经正确引用了它。
标签: c# asp.net ajax autocomplete autocompleteextender