更新3:
GetGrowers电话的代码落后:
using AjaxControlToolkit;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.ServiceModel.Web;
namespace AmericanApple
{
public partial class ReceivingStation : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
bcDataTextBox.Focus();
}
[ScriptMethod]
[WebMethod]
public static string[] GetGrowers(string prefixText, int count)
{
string[] growers = { "American Apple", "Lewis", "Grice" };
return growers;
}
}
}
更新2:
我想我已经发现了这个问题。在Chrome开发者工具中查看“网络”标签时,我可以看到对GetGrowers的调用,并且在请求标头中,它要求application/json
格式,但在响应标头中,它会返回text/html
。因此,下拉列表中的所有字符实际上都是html中的整个页面。
在我的工作示例中,Auto CE调用的响应头是application/json
。所以无论出于何种原因,我的项目对此的反应都不是正确的格式。我检查了web.config文件,看不到我的工作示例和我正在处理的项目之间的任何差异。
更新:
Chrome中发生的事情的图片:
ORIGINAL:
我无法让AutoCompleteExtender工作。在Chrome和FireFox中,我的自动完成结果是一堆(随机?)字符。仅在Internet Explorer中,当我单击TextBox时,页面冻结,我的Visual Studio输出如下所示:
在eval代码中第39行第3行抛出异常 0x800a1391 - JavaScript运行时错误:'s'未定义
在eval代码中第37行第3列抛出异常 0x800a1391 - JavaScript运行时错误:'r'未定义
在eval代码中第31行第3列抛出异常 0x800a1391 - JavaScript运行时错误:'e'未定义
......并且无限期地继续这样做。
我安装了最新的AjaxControlToolkit:17.1.1。 我正在使用VS Pro 2015版本14.0.25420.01 Update 3。 .NET Framework版本4.7.02046
在我的Site.Master页面中,我正在声明
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
和正文中的脚本管理器:
<asp:ScriptManager runat="server" EnablePageMethods="true" EnablePartialRendering="true">
<Scripts>
<%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>
<%--Framework Scripts--%>
<asp:ScriptReference Name="MsAjaxBundle" />
<asp:ScriptReference Name="jquery" />
<asp:ScriptReference Name="bootstrap" />
<asp:ScriptReference Name="respond" />
<asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
<asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
<asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
<asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
<asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
<asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
<asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
<asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
<asp:ScriptReference Name="WebFormsBundle" />
<%--Site Scripts--%>
</Scripts>
</asp:ScriptManager>
在运行AutoCompleteExtender的页面上:
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<cc1:AutoCompleteExtender ID="AutoCompleteGrower" runat="server" TargetControlID="txtGrower"
MinimumPrefixLength="0" CompletionInterval="100" EnableCaching="true" UseContextKey="false"
ServiceMethod="GetGrowers" CompletionListCssClass="autocomplete_List" CompletionListItemCssClass="autocomplete_ListItem"
CompletionListHighlightedItemCssClass="autocomplete_HighlightedListItem" FirstRowSelected="true">
</cc1:AutoCompleteExtender>
My TextBox:
<asp:TableCell><asp:TextBox ID="txtGrower" runat="server" CssClass="form-control" AutoCompleteType="None"></asp:TextBox></asp:TableCell>
我没有在SO上发现同一错误的AutoCompleteExtender问题。我在这里错过了什么?错误发生在我的ServiceMethod可以返回之前,我知道的很多。
答案 0 :(得分:2)
ASP.NET路由似乎存在问题: https://stackoverflow.com/a/8147357/644496
不幸的是,AJAX Control Toolkit无法检测是否启用了路由。
解决此问题的最简单方法是将.aspx
扩展名的网页指定为ServicePath
:
<cc1:AutoCompleteExtender
ID="AutoCompleteGrower"
runat="server"
TargetControlID="txtGrower"
MinimumPrefixLength="1"
CompletionInterval="100"
EnableCaching="true"
UseContextKey="false"
ServicePath="ReceivingStation.aspx"
ServiceMethod="GetGrowers"
FirstRowSelected="true">
答案 1 :(得分:2)
有效的解决方案是将方法添加到Web服务文件(asmx.cs)。
所以类声明看起来像这样:
@property
方法声明:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class AmericanAppleServices : System.Web.Services.WebService
{
使用此方法我还必须在我的.aspx页面中的AutoCompleteExtender中声明服务路径:
[WebMethod]
public string[] GetGrowers(string prefixText, int count)
{
我仍然不知道为什么其他方式不起作用,但现在这样做。 @MikhailTymchukDX谢谢你的帮助!