Skip to main content
 首页 » 编程设计

c#之使用 Ajax AutoCompleteExtender 请求 Web 服务时出现 500 错误

2024年02月27日33jackei

场景:

我正在开发一个 webform(MVC) 项目,在该项目中我必须使用 Ajax AutoCompleteExtender 控件中的 Web 服务来进行搜索。首先,我检查了工作正常的 HelloWorld() 服务,但是当我创建名为 GetParentID 的自定义 Web 服务并对其发出请求时。它向我显示了 500 条错误消息,它在下面的快照中定义:

下面是我的 Default.aspx.cs 代码:

 <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<ajaxToolkit:AutoCompleteExtender 
    ID="AutoCompleteExtender1" 
    runat="server" 
    ServiceMethod="GetParentID" 
    ServicePath="~/Services.asmx" 
    TargetControlID="TextBox1" 
    MinimumPrefixLength="1" 
    UseContextKey="false" 
    CompletionInterval="0"  
    EnableCaching="true"  
    CompletionSetCount="30"  
    FirstRowSelected="true"> 
 
 
</ajaxToolkit:AutoCompleteExtender> 

下面是我的 Service.asmx.cs 代码:

[System.Web.Script.Services.ScriptMethod()] 
    [System.Web.Services.WebMethod] 
    public string[] GetParentID(string prefixText, int count) 
    { 
        DataTable dt = new DataTable(); 
        DataColumn dc = new DataColumn("Name", typeof(String)); 
        dt.Columns.Add(dc); 
 
        DataRow dr = dt.NewRow(); 
 
        dr[0] = "Adil"; 
        dr[0] = "Ahmer"; 
        dr[0] = "Kamran"; 
        dr[0] = "Fasih"; 
        dr[0] = "Azeem"; 
        dr[0] = "Rana"; 
        dr[0] = "Humza"; 
        dr[0] = "Waleed"; 
        dr[0] = "Faizan Rafiq"; 
        dr[0] = "Mohsin"; 
        dr[0] = "Ahsan"; 
        dr[0] = "Arshad Ahmed"; 
        dr[0] = "Uncle Majboor"; 
 
        dt.Rows.Add(dr); 
 
        //DataTable dt = null; 
        DataView dv = null; 
        List<string> suggestions = new List<string>(); 
        //dt = (DataTable)HttpContext.Current.Session["ParentID"]; 
 
        if ((dt != null)) 
        { 
            dv = dt.Copy().DefaultView; 
            dv.RowFilter = "Name like  '%" + prefixText + "%' "; 
            dv.Sort = "ID Asc"; 
 
            string c = prefixText; 
            double Num = 0; 
            bool isNum = double.TryParse(c, out Num); 
            int indx = 0; 
 
            foreach (DataRowView dvr in dv) 
            { 
                if (indx <= count) 
                { 
                    suggestions.Add(AjaxControlToolkit.AutoCompleteExtender.CreateAutoCompleteItem(dvr["Name"].ToString(), dvr["Name"].ToString())); 
                    indx += 1; 
                } 
 
            } 
        } 
        return suggestions.ToArray(); 
    } 

我不知道如何处理 asmx 网络服务。这是我的第一次尝试。大多数情况下,我使用 javascript/jquery ajax 调用发出请求。以下是我在此应用程序中使用的先决条件。我还附上了完整的 github 存储库链接,这样你们就可以轻松地帮助我解决这个问题。

github

在 VS 2013 上创建的解决方案

点网框架 4.5

AjaxControlToolKit

AjaxControlToolkit.Installer.17.1.1.0

请您参考如下方法:

那是因为您正在使用 AJAX 调用该 Web 方法。只有在类定义上具有 [ScriptService] 属性的 Web 服务才能从脚本中调用。

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.  
//    [System.Web.Script.Services.ScriptService] 

所以只需取消注释该行,它就会开始工作。

[System.Web.Script.Services.ScriptService]