CascadingDropDown Отсутствует параметр: knownCategoryValues - PullRequest
1 голос
/ 04 февраля 2011

У меня возникли проблемы с работой списков CascadingDropDown, в нем отображается ошибка метода 500 внутри списка.Я попробовал все распространенные решения этой проблемы, но все еще не повезло.

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

System.ArgumentException: недопустимое имя метода 'getcategories', имена методовчувствительны к регистру.Обнаружено имя метода GetCategories с тем же именем, но с другим регистром.Имя параметра: methodName

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

System.InvalidOperationException: отсутствует параметр: 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/>

Файл веб-службы:

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();
            }*/
        }
}

1 Ответ

0 голосов
/ 04 февраля 2011

Чтобы использовать с 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(), чтобы получить его действительное значение.

...