2011-02-04 5 views
1

У меня возникли проблемы с запуском списков CascadingDropDown, отображающим ошибку метода 500 внутри списка. Я пробовал все общие решения этого и до сих пор не повезло.CascadingDropDown Отсутствует параметр: knownCategoryValues ​​

Первоначально я получаю следующее сообщение об ошибке:

System.ArgumentException: Invalid method name 'getcategories', method names are case sensitive. The method name 'GetCategories' with the same name but different casing was found. Parameter name: methodName

Что странно, потому что я определенно устанавливая имя метода в правильном случае, но он отправлял в нижнем регистре (даже хром показал страницу, как отправка это в правильном случае). В любом случае я работал над этим, изменив имя метода на нижний регистр. Теперь это приносит новую ошибку:

System.InvalidOperationException: Missing parameter: knownCategoryValues.

Если кто-то может пролить свет на одну из этих проблем, которые были бы большой помощью, я провел слишком много времени на этой проблеме.

Спасибо.

ОБНОВЛЕНО Код:

<ajaxToolkit:ToolkitScriptManager EnablePageMethods="true" ID="ToolkitScriptManager1" runat="server"> 
</ajaxToolkit:ToolkitScriptManager> 
<ajaxToolkit:CascadingDropDown 
    ID="CascadingDropDown1" 
    runat="server" 
    TargetControlID="mmCategory" 
    Category="Category" 
    PromptText="Select a category" 
    ServicePath="~/DropDownLists.asmx" 
    ServiceMethod="GetCategories" /> 
<ajaxToolkit:CascadingDropDown 
    ID="CascadingDropDown2" 
    runat="server" 
    TargetControlID="mmTemplate" 
    ParentControlID="mmCategory" 
    PromptText="Select a template" 
    ServiceMethod="GetTemplates" 
    ServicePath="~/DropDownLists.asmx" 
    Category="Template" /> 
Category: <asp:DropDownList ID="mmCategory" runat="server"/><br/> 
Template: <asp:DropDownList ID="mmTemplate" runat="server"/><br/> 

Web Service File:

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

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

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

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

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

     List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 
     values.Add(new CascadingDropDownNameValue("test 1", "1")); 
     values.Add(new CascadingDropDownNameValue("test 2", "2")); 
     return values.ToArray(); 

     /*using (MiscDataContext dc = new MiscDataContext()) 
     { 
      var CatQuery = from D in dc.Templates 
         select new { D.Category } 
          into CatQueryResults 
           select CatQueryResults; 

       foreach (var CatResult in CatQuery) 
       { 
        string CatReturn = CatResult.Category; 
        values.Add(new CascadingDropDownNameValue(CatReturn, CatReturn)); 
       } 
       return values.ToArray(); 
     }*/ 

    } 


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

     StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); 
     string varCat; 
     varCat = kv["Category"]; 


     List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 
     values.Add(new CascadingDropDownNameValue("test 3", "3")); 
     values.Add(new CascadingDropDownNameValue("test 4", "4")); 
     return values.ToArray(); 
     /*using (MiscDataContext dc = new MiscDataContext()) 
     { 
      var CatQuery = from D in dc.Templates 
         where(D.Category == varCat) 
         select new { D.ID, D.Name } 
         into CatResult 
         select CatResult; 

       foreach (var CatResult in CatQuery) 
        { 
         int ID = (int)CatResult.ID; 
         string Name = CatResult.Name; 
         values.Add(new CascadingDropDownNameValue(Name, Convert.ToString(ID))); 
        } 
        return values.ToArray(); 
      }*/ 
     } 
} 
+0

некоторый код будет оценен – V4Vendetta

+0

К сожалению, я добавил код. – baked

ответ

0

Для того, чтобы можно было использовать с CascadingDropDown, прототип вашего веб-метода должен быть:

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

Если вы присвоить что-то свойству ContextKey расширителя, этот прототип станет с:

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

Параметр knownCategoryValues представляет текущий выбор в главном раскрывающемся меню. Вы должны передать его CascadingDropDown.ParseKnownCategoryValuesString(), чтобы получить его фактическое значение.

+0

Я добавил свой код в исходное сообщение, и, насколько я вижу, я использовал то же, что и здесь. – baked

+0

@ baked, можете ли вы предоставить исключение? –

+0

Прошу прощения, я понятия не имею, что это такое, я относительно новичок в среде .NET. – baked

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