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