【问题标题】:AJAX AutoComplete in C# asp.net 4.5 Not WorkingC# asp.net 4.5 中的 AJAX 自动完成功能不起作用
【发布时间】:2013-06-26 17:34:55
【问题描述】:

我第一次尝试使用 AJAX,但我一无所获。我已经阅读了许多网站,据我所知我的代码是正确的,但是当我测试页面时,我没有得到任何结果。

这是我的 aspx 代码:

<%@ Page Title="Search" Language="C#" MasterPageFile="~/Search.Master" AutoEventWireup="true" CodeBehind="Search.aspx.cs" Inherits="NEReval.Search" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server" EnableViewState="True">

    <ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnablePageMethods="True">  
    </ajax:ToolkitScriptManager> 

    <asp:TextBox ID="tbxSearch" runat="server" TabIndex="9" Style="position: absolute; left: 0px; top: 35px" Height="21px" Width="400px"></asp:TextBox>
    <ajax:AutoCompleteExtender   
        ID="AutoCompleteExtender1"   
        TargetControlID="tbxSearch"
        MinimumPrefixLength="1"   
        CompletionSetCount="10"
        ServiceMethod="GetCompletionList"
        ServicePath="AutoCompleteService.asmx"
        runat="server" /> 

这是我的代码,它位于一个名为 AutoCompleteService.asmx 的文件中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace NEReval
{
    /// <summary>
    /// Summary description for AutoCompleteService
    /// </summary>
    [WebService(Namespace = "http://www.nereval.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 AutoCompleteService : System.Web.Services.WebService
    {
        [System.Web.Services.WebMethodAttribute(), System.Web.Script.Services.ScriptMethodAttribute()]
        public static string[] GetCompletionList(string prefixText, int count)
        {
            List<String> Return = SearchList.GetSearchList(HttpContext.Current.Session["sTown"].ToString());

            return (from r in Return where r.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) select r).Take(count).ToArray();
        } 
    }
}

我已经测试过,GetSearchList 从未被调用,所以它没有调用 GetCompletionList。谁能看到我做错了什么?我正在 Visual Studio Express 2012 for Web 中对此进行编程。

【问题讨论】:

  • 您的.asmx Web 服务实际上与您的母版页处于同一级别还是路径错误?
  • 您是否查看过 IIs 日志以了解您是否在不同的 URL 请求 Web 服务?

标签: c# asp.net autocomplete ajaxcontroltoolkit .net-4.5


【解决方案1】:

为了证明这是一个网络服务问题,在您的搜索页面代码隐藏中创建一个页面方法,如下所示:

[WebMethod]
public static string[] GetCompletionList()
{
    List<String> Return = SearchList.GetSearchList(HttpContext.Current.Session["sTown"].ToString());

    return (from r in Return where r.StartsWith(prefixText, StringComparison.CurrentCultureIgnoreCase) select r).Take(count).ToArray();
}

注意:ASP.NET 页面方法必须是static。此外,您可能需要添加一些 usings 来编译代码。

现在你可以在你的 autocompleteextender 标记中调用这个页面方法作为方法名称,因为它是你的标记的本地方法,像这样:

ServicePath="GetCompletionList"

【讨论】:

  • 这行得通,我将在这里使用它,为什么它会在这里工作而不是在 asmx 文件中只是为了将来的知识?它们都在同一条路径上。
  • 查看 Web 服务代码不,但是如果不实际运行代码,Web 服务可能会很棘手并且很难诊断。希望我能给你一个更好的答案,对不起。
  • 好吧,至少我知道这不是我做的代码问题。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
相关资源
最近更新 更多