【问题标题】:ajax control toolkit cascadingdropdown web service error c#ajax控制工具包cascadingdropdown web服务报错c#
【发布时间】:2014-01-13 14:30:19
【问题描述】:

我正在尝试将 ajax 控制工具包 cascadingdropdown 与 Web 服务一起使用,但在使用 Web 服务时,我在初始下拉框中不断收到“方法错误 0”。如果我尝试在初始下拉菜单中不使用 Web 服务,我会在第二个下拉菜单中遇到相同的错误(级联下拉菜单)。

这是我的网络服务代码和下拉菜单:

     <asp:DropDownList ID="ServerDropDown" runat="server"></asp:DropDownList>

    <ajaxToolkit:CascadingDropDown
        ID="CascadingDropDown2"
        runat="server"
        TargetControlID="ServerDropDown" 
        Category="ServerID" 
        PromptText="-- Select one --"                         
        ServiceMethod="GetServerValues"
        ServicePath="../App_Data/Search.asmx.cs"
         />


    <asp:DropDownList ID="DatabaseDropDown" runat="server"></asp:DropDownList>

    <ajaxToolkit:CascadingDropDown
        ID="CascadingDropDown1"
        runat="server"
        TargetControlID="DatabaseDropDown" 
        ParentControlID="ServerDropDown"
        Category="DatabaseID" 
        PromptText="-- Select one --"             
        ServiceMethod="GetDatabasesForServer"
        ServicePath="../App_Data/Search.asmx.cs"
         />

服务代码:

using System;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using AjaxControlToolkit;
using System.Collections.Generic;

///<summary>
/// Summary description for ServiceCS
///</summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]


public class Search : System.Web.Services.WebService
{

    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]    
    public CascadingDropDownNameValue[] GetDatabasesForServer(string knownCategoryValues, string category)
    {
        //StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);

        //int ServerID;
        //if (!kv.ContainsKey("Server") || !Int32.TryParse(kv["Server"], out ServerID))
        //{
        //    return null;
        //}

        string ServerID = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["ServerID"];

        string sSQL = @"SELECT DL.DatabaseID AS value, SL.ServerName + ' - ' + DL.DatabaseName AS DisplayText " +
                "FROM BabelFish.dbo.DatabaseList DL (NOLOCK) " +
                "INNER JOIN BabelFish.dbo.ServerList SL (NOLOCK) ON DL.ServerId = SL.ServerId " +
                "WHERE DL.IsActive = 1 " +
                "AND SL.ServerID = '" + ServerID + "' " +
                "Order by DisplayText";

        DataTable dt = DatabaseAccessing.DatabaseConnection.GetDataTable(sSQL);

        List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow dr = dt.Rows[i];
            values.Add(new CascadingDropDownNameValue((string)dr["DisplayText"], dr["DatabaseID"].ToString()));
        }

        //List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

        //foreach (DataRow dr in ds)
        //{
        //    values.Add(new CascadingDropDownNameValue((string)dr["Color"], dr["ColorID"].ToString()));
        //}

        return values.ToArray();
    }

    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public CascadingDropDownNameValue[] GetServerValues(string knownCategoryValues, string category)
    {

        string sSQL = @"SELECT ServerId as Value, ServerName as DisplayText " +
            "FROM BabelFish.dbo.ServerList (NOLOCK) " +
            "Order By DisplayText";

        DataTable dt = DatabaseAccessing.DatabaseConnection.GetDataTable(sSQL);

        List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();

        // tried manually adding if it was issue with data set but did not work eihter
        //values.Add(new CascadingDropDownNameValue("testdispally1", "1"));
        //values.Add(new CascadingDropDownNameValue("testdispally2", "2"));


        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow dr = dt.Rows[i];
            values.Add(new CascadingDropDownNameValue((string)dr["DisplayText"], dr["DatabaseID"].ToString()));
        }


        return values.ToArray();
    }



}// end class

【问题讨论】:

    标签: c# ajaxcontroltoolkit cascadingdropdown


    【解决方案1】:

    一位朋友为我找到了解决方案。代码很好,但是 AjaxControlToolkit.dll 没有为这个特定的功能正确注册(或其他东西)。它为工具包中的其他功能工作/注册。他使用 NUGET 下载了 ajax 工具包并将其作为独立包安装并指向该包(而不是像我一样直接指向 .dll),它运行良好。

    只需测试/确认此配置在发布到服务器时是否有效(根据 .dll 发布到服务器时的注册路径,我遇到了 .dll 无法在服务器上运行的问题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 2013-05-22
      • 1970-01-01
      相关资源
      最近更新 更多