AutoCompleteExtender返回HTML而不是JSON

时间:2017-11-01 12:56:44

标签: c# asp.net ajaxcontroltoolkit autocompleteextender

更新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文件,看不到我的工作示例和我正在处理的项目之间的任何差异。

enter image description here

更新:

Chrome中发生的事情的图片:

AutoCompleteExtender in 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可以返回之前,我知道的很多。

2 个答案:

答案 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谢谢你的帮助!