【问题标题】:how to work with auto complete extender with asp.net 4.0 with c#如何使用带有 c# 的 asp.net 4.0 使用自动完成扩展器
【发布时间】:2014-07-08 05:46:44
【问题描述】:

我只想使用自动完成扩展器来查找将用户键入的内容与文本框相关联的结果。这是我的代码:

[System.Web.Script.Services.ScriptMethod()]
    [System.Web.Services.WebMethod]
    public static List<string> GetTickets(string prefixText)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            List<string> Tickets = new List<string>();
            string userid = db.Users.Where(u => u.Username.Equals((String)HttpContext.Current.Session["Username"])).Select(u => u.Ref_no).SingleOrDefault();
            var enquiry = db.Enquiries.Where(i => (i.ForwardTo.Equals(userid) || i.AttendBy.Equals(userid))).ToList(); 
            foreach(var item in enquiry)
            {
                if(item != null)
                {
                    var flag = db.Flags.Where(f => f.Enquiry_History_id.Equals(item.Ref_no) && f.User_id.Equals(userid)).Select(f => new { IsDisplay = f.IsDisplay,IsRead = f.IsRead }).ToList();
                    bool IsIns = true;
                    foreach (var item1 in flag)
                    {
                        if (item1.IsDisplay == false)
                        {
                            IsIns = false;
                        }
                        if (item1.IsRead == true)
                        {
                            IsIns = false;
                        }
                    }
                    if (IsIns == true)
                    {
                        Tickets.Add(item.Ref_no.ToString());
                    }
                }
            }
            return Tickets;
        }
    }

这是我的设计代码:

    <asp:TextBox ID="TextBox1" runat="server" CssClass="input" Width="115px"                                                                      ValidationGroup="TicketSearch"></asp:TextBox>
     <ajaxToolkit:AutoCompleteExtender ID="TextBox1_AutoCompleteExtender" runat="server"
MinimumPrefixLength="1" EnableCaching="true" CompletionSetCount="1" CompletionInterval="1000" ServiceMethod="GetTickets"
TargetControlID="TextBox1" CompletionListCssClass="popUpDialog">
</ajaxToolkit:AutoCompleteExtender>

为了显示找到的结果,我包含了这个 css 类,例如:

.popUpDialog
        {
            z-index: 99 !important;
        }

        .autoComplete_listMain
        {
            z-index: 2147483647 !important;
            background: #ffffff;
            border: solid 2px #808080;
            color: #000000;
        }

-------------------已更新------------ ----------------------

现在我使用这种技术:

<script language="javascript" type="text/javascript">
    $(function () {
        $('#<%=TextBox1.ClientID%>').autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "MasterPage.master/GetTickets",
                    data: "{ 'pre':'" + request.term + "'}",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return { value: item }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            }
        });
    });
</script>

这是设计:

<ajaxToolkit:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="TextBox1" ServicePath="" ServiceMethod="GetTickets" MinimumPrefixLength="1" EnableCaching="true" CompletionListCssClass="completionList" 
                                                                                                                    CompletionListItemCssClass="listItem" 
                                                                                                                    CompletionListHighlightedItemCssClass="itemHighlighted"/>

在代码后面:

 [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    [System.Web.Services.WebMethod]
    public static List<string> GetTickets(string prefixText)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            List<string> Tickets = new List<string>();
            string userid = db.Users.Where(u => u.Username.Equals((String)HttpContext.Current.Session["Username"])).Select(u => u.Ref_no).SingleOrDefault();
            var enquiry = db.Enquiries.Where(i => (i.ForwardTo.Equals(userid) || i.AttendBy.Equals(userid))).ToList();
            foreach (var item in enquiry)
            {
                if (item != null)
                {
                    var flag = db.Flags.Where(f => f.Enquiry_History_id.Equals(item.Ref_no) && f.User_id.Equals(userid)).Select(f => new { IsDisplay = f.IsDisplay, IsRead = f.IsRead }).ToList();
                    bool IsIns = true;
                    foreach (var item1 in flag)
                    {
                        if (item1.IsDisplay == false)
                        {
                            IsIns = false;
                        }
                        if (item1.IsRead == true)
                        {
                            IsIns = false;
                        }
                    }
                    if (IsIns == true)
                    {
                        Tickets.Add(item.Ref_no.ToString());
                    }
                }
            }
            return Tickets;
        }
    }

我在运行时发现了这个错误:

Server Error in '/CRM' Application.

This type of page is not served.

Description: The type of page you have requested is not served because it has been explicitly forbidden.     Please review the URL below and make sure that it is spelled correctly. 

Requested URL: /CRM/Staff/MasterPage.master/GetTickets

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

--------------已更新----- ------

我已经尝试过 Jalpesh 的建议

我在这里创建了一项服务,例如:

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Linq;
using System.Configuration;
using System.Collections.Generic;
/// <summary>
/// Summary description for AutoComplete
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// 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 AutoComplete : System.Web.Services.WebService
{

    public AutoComplete()
    {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public List<string> GetTicketList(string prefixText)
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            List<string> Tickets = new List<string>();
            string userid = db.Users.Where(u => u.Username.Equals((String)HttpContext.Current.Session["Username"])).Select(u => u.Ref_no).SingleOrDefault();
            var enquiry = db.Enquiries.Where(i => (i.ForwardTo.Equals(userid) || i.AttendBy.Equals(userid))).ToList();
            foreach (var item in enquiry)
            {
                if (item != null)
                {
                    var flag = db.Flags.Where(f => f.Enquiry_History_id.Equals(item.Ref_no) && f.User_id.Equals(userid)).Select(f => new { IsDisplay = f.IsDisplay, IsRead = f.IsRead }).ToList();
                    bool IsIns = true;
                    foreach (var item1 in flag)
                    {
                        if (item1.IsDisplay == false)
                        {
                            IsIns = false;
                        }
                        if (item1.IsRead == true)
                        {
                            IsIns = false;
                        }
                    }
                    if (IsIns == true)
                    {
                        Tickets.Add(item.Ref_no.ToString());
                    }
                }
            }
            return Tickets;
        }
    }
}

这是我的自动完成扩展器:

  <ajaxToolkit:AutoCompleteExtender runat="server" ID="autoComplete1" TargetControlID="TextBox1" ServicePath="AutoComplete.asmx" ServiceMethod="GetTicketList" MinimumPrefixLength="1" EnableCaching="true" CompletionListCssClass="completionList" 
                                                                                                                    CompletionListItemCssClass="listItem" 
                                                                                                                    CompletionListHighlightedItemCssClass="itemHighlighted"/>      

最后在这里用 jquery 来调用它:

<script language="javascript" type="text/javascript">
    $(function () {
        $('#<%=TextBox1.ClientID%>').autocomplete({
            source: function (request, response) {
                $.ajax({
                    url: "AutoComplete.asmx/GetTicketList",
                    data: "{ 'pre':'" + request.term + "'}",
                    dataType: "json",
                    type: "POST",
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        response($.map(data.d, function (item) {
                            return { value: item }
                        }))
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                        alert(textStatus);
                    }
                });
            }
        });
    });
</script>

这给了我这样的错误:

Server Error in '/CRM' Application.

Request format is unrecognized for URL unexpectedly ending in '/GetTicketList'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/GetTicketList'.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/GetTicketList'.]
   System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +518909
   System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
   System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
   System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +203
   System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +128
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

【问题讨论】:

  • 你遇到了什么实际问题。
  • 我没有看到结果,当我设置调试到这个 Web 方法时,我没有收到这个事件或没有触发。

标签: c# asp.net autocompleteextender


【解决方案1】:

您尚未将服务路径放入您的自动完成扩展程序中。

ServicePath="AutoComplete.asmx"

您还把脚本管理器放在了自动完成扩展器之上。如果没有,请像下面这样写。

<ajaxToolkit:ToolkitScriptManager  ID="ScriptManager1" runat="server">
</ajaxToolkit:ToolkitScriptManager>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多