2014-01-13 1 views
0

Я пытаюсь использовать каскадный вызов инструментария ajax с помощью веб-службы, но я продолжаю получать «Ошибка метода 0» в исходном раскрывающемся списке при использовании веб-службы. Если я попытался не использовать веб-сервис при первоначальном раскрытии, я получил ту же ошибку на втором (каскадное падение).ajax control toolkit cascadingdropdown ошибка веб-службы C#

Вот мой код для веб-службы и падений падения:

 <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 

ответ

0

Друг нашел решение для меня. Код был прав, но AjaxControlToolkit.dll не был зарегистрирован правильно (или что-то еще) для этой конкретной функции. Он работал/был зарегистрирован для других функций в наборе инструментов. Он использовал NUGET для загрузки набора инструментов ajax и установки его как самостоятельного пакета и указывал на пакет (а не непосредственно на .dll, как я это делал), и он работал нормально.

Просто нужно проверить/подтвердить, что эта конфигурация работает при отправке на сервер (у меня были проблемы с DLL, не работающими на сервере, на основе зарегистрированного пути для .dll, когда он был отправлен на сервер).

Смежные вопросы