Quantcast
Channel: ASP.NET AJAX + Ajax Control Toolkit (ACT)
Viewing all articles
Browse latest Browse all 5678

Cascading DropDownList - Error Item has already been added key in Dictionary

$
0
0

Hi all,

I hope you all must be fine today.

I've some problem with Ajax Toolkit Cascading DropdownList. I have 3 DropdownList Controls.

1st DDL for Principal 2nd DDL for Product and 3rd DDL for product details.

3rd DDL gives Method Error 500 and when I debug code I found this error "Additional information: Item has already been added. Key in dictionary: 'category'  Key being added: 'category'"

HTML

1st DDL

<asp:DropDownList ID="ddPrincipal" runat="server" style="width: 100%;" /><ajax:CascadingDropDown ID="CascadingDropDownPrincipal" runat="server" TargetControlID="ddPrincipal" ServicePath="~/services/PrincipalService.asmx"
   ServiceMethod="GetPrincipals" LoadingText="Loading Principals..." PromptText="Select Pricipal" Category="category" />

2nd DDL

<asp:DropDownList ID="ddlProducts" runat="server" style="width: 100%;" /><ajax:CascadingDropDown ID="CascadingDropDownProducts" runat="server" TargetControlID="ddlProducts"
		ParentControlID="ddPrincipal" ServicePath="~/services/PrincipalService.asmx" ServiceMethod="GetProducts"
		LoadingText="Loading Products..." PromptText="Select Products" Category="category" />

3rd DDL

<asp:DropDownList ID="ddlProductDetails" runat="server" style="width: 100%;" /><ajax:CascadingDropDown ID="CascadingDropDown1" runat="server" TargetControlID="ddlProductDetails"
	ParentControlID="ddlProducts" ServicePath="~/services/PrincipalService.asmx" ServiceMethod="GetProductDetails"
	LoadingText="Loading Products Details..." PromptText="Select Product Detail" Category="category" />

WebServices

[WebMethod]
    public CascadingDropDownNameValue[] GetPrincipals(string knownCategoryValues, string category) {
        string cs = ConfigurationManager.ConnectionStrings["SalamcoSys_DB"].ConnectionString;

        using (SqlConnection sql = new SqlConnection()) {
            sql.ConnectionString = cs;
            using (SqlCommand cmd = new SqlCommand()) {
                cmd.CommandText = "spGet_PrincipalName";
                cmd.Connection = sql;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new SqlParameter("@state", ""));
                using (SqlDataAdapter da = new SqlDataAdapter()) {
                    da.SelectCommand = cmd;
                    sql.Open();
                    DataSet ds = new DataSet();

                    List<CascadingDropDownNameValue> listPrincipals = new List<CascadingDropDownNameValue>();
                    da.Fill(ds);
                    sql.Close();
                    if (ds.Tables[0].Rows.Count > 0) {
                        foreach (DataRow dr in ds.Tables[0].Rows) {
                            string pri_Id = dr["Pri_Id"].ToString();
                            string pri_Name = dr["Pri_Name"].ToString();
                            listPrincipals.Add(new CascadingDropDownNameValue(pri_Name, pri_Id));
                        }
                    }
                    return listPrincipals.ToArray();
                }
            }
        }
    }

    [WebMethod]
    public CascadingDropDownNameValue[] GetProducts(string knownCategoryValues, string category)
    {
        int pri_Id;
        StringDictionary priValues = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        pri_Id = Convert.ToInt32(priValues["category"]);

        string cs = ConfigurationManager.ConnectionStrings["SalamcoSys_DB"].ConnectionString;
        using (SqlConnection sql = new SqlConnection()) {
            sql.ConnectionString = cs;
            using (SqlCommand cmd = new SqlCommand()) {
                cmd.CommandText = "SELECT * FROM Products WHERE 1=1 AND Pri_Id = @Pri_Id ORDER BY Pro_Name";
                cmd.Connection = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@Pri_Id", pri_Id));
                using (SqlDataAdapter da = new SqlDataAdapter()) {
                    da.SelectCommand = cmd;
                    sql.Open();
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    sql.Close();

                    List<CascadingDropDownNameValue> listProducts = new List<CascadingDropDownNameValue>();
                    if (ds.Tables[0].Rows.Count > 0) {
                        foreach (DataRow dr in ds.Tables[0].Rows) {
                            string pro_Id = dr["Pro_Id"].ToString();
                            string pro_Name = dr["Pro_Name"].ToString();
                            listProducts.Add(new CascadingDropDownNameValue(pro_Name, pro_Id));
                        }
                    }
                    return listProducts.ToArray();
                }
            }
        }

    }

    [WebMethod]
    public CascadingDropDownNameValue[] GetProductDetails(string knownCategoryValues, string category)
    {
        StringDictionary proValues = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        int proId;
        proId = Convert.ToInt32(proValues["category"]);

        string cs = ConfigurationManager.ConnectionStrings["SalamcoSys_DB"].ToString();
        using (SqlConnection sql = new SqlConnection())
        {
            sql.ConnectionString = cs;
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.CommandText = "SELECT * FROM ProductDetails WHERE 1=1 AND Pro_Id = @Pro_Id ORDER BY ProDetail";
                cmd.Connection = sql;
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add(new SqlParameter("@Pro_Id", proId));
                using (SqlDataAdapter da = new SqlDataAdapter())
                {
                    da.SelectCommand = cmd;
                    sql.Open();
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    sql.Close();

                    List<CascadingDropDownNameValue> listProductsDetails = new List<CascadingDropDownNameValue>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            string pdId = dr["Pd_Id"].ToString();
                            string proDetails = dr["ProDetail"].ToString();
                            listProductsDetails.Add(new CascadingDropDownNameValue(proDetails, pdId));
                        }
                    }
                    return listProductsDetails.ToArray();
                }
            }
        }
    }

I dont know how to solve this issue.

I will really appreciate if someone solve this issue.

Regards


Viewing all articles
Browse latest Browse all 5678

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>