I have three cascading drop downs on an ASP.NET 2.0 aspx page. I do not have UseContextKey or ContextKey attributes set, but for
whatever reason my first cascadingdropdown never fills, instead the only entry is [Method error 500] . When I examine the http response
using web development helper I see the following message
"Invalid web service call, missing value for parameter: \u0027contextKey\u0027."
Why the hell is the toolkit looking for a ContextKey even though the ContextKey and UseContextKey attributes are not defined? You'll notice
that in the cascadingdropdown example in the samplewebsite that whenever ContextKey and UseContextKey are not defined there is no need to
specify ContextKey in the parameter list for the dropdown webservice method.
PLEASE HELP!!!! Here is the pertinent code - (the webservice code behind follows the aspx script -- the functions for the dropdowns are overloaded with a function that
has ContextKey in its parameter list, and one that doesn't)
<asp:DropDownListID="ddlService"runat="server"/><ajaxToolkit:CascadingDropDownID="CascadingDropDownService"runat="server"TargetControlID="ddlService"Category="Service"PromptText="Select A Service"ServiceMethod="GetServices"ServicePath="ServiceClassRank.asmx"/><ajaxToolkit:ValidatorCalloutExtenderrunat="Server"ID="ValidatorCalloutExtenderService"TargetControlID="RFVService"HighlightCssClass="validatorCalloutHighlight"/><asp:RequiredFieldValidatorrunat="server"ID="RFVService"ControlToValidate="ddlService"Display="None"ErrorMessage="Service is required."/></td><tdclass="tblRowMainCss">*Class <asp:DropDownListID="ddlClass"runat="server"AutoPostBack="True"OnSelectedIndexChanged="ddlClass_SelectedIndexChanged"/><ajaxToolkit:CascadingDropDownID="CascadingDropDownClass"runat="server"Category="Class"PromptText="Select A Class"TargetControlID="ddlClass"ServiceMethod="GetClassesForService"ServicePath="ServiceClassRank.asmx"ParentControlID="ddlService"/><ajaxToolkit:ValidatorCalloutExtenderrunat="Server"ID="ValidatorCalloutExtenderClass"TargetControlID="RFVClass"HighlightCssClass="validatorCalloutHighlight"/><asp:RequiredFieldValidatorrunat="server"ID="RFVClass"ControlToValidate="ddlClass"Display="None"ErrorMessage="Class is required."/></td><tdclass="tblRowMainCss"style="width: 323px;">*Rank
<asp:DropDownListID="ddlRank"runat="server"Enabled="false"/><ajaxToolkit:CascadingDropDownID="CascadingDropDownRank"runat="server"Category="Rank"PromptText="Select A Rank"TargetControlID="ddlRank"ServiceMethod="GetRanksForClassAndService"ServicePath="ServiceClassRank.asmx"ParentControlID="ddlClass"/>//webservice code behind
[WebMethod]publicCascadingDropDownNameValue[] GetServices(string knownCategoryValues,string category)
{
StringDictionary kv =CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);serviceTableAdapter serviceAdapter =newserviceTableAdapter();Services.serviceDataTable serviceTable = serviceAdapter.GetServices();List<CascadingDropDownNameValue> values =newList<CascadingDropDownNameValue>();foreach (Services.serviceRow drin serviceTable)
{
values.Add(newCascadingDropDownNameValue( dr.description, dr.brsv));}
return values.ToArray();}
[
WebMethod]publicCascadingDropDownNameValue[] GetServices(string knownCategoryValues,string category,string contextKey){
StringDictionary kv =CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);serviceTableAdapter serviceAdapter =newserviceTableAdapter();Services.serviceDataTable serviceTable = serviceAdapter.GetServices();List<CascadingDropDownNameValue> values =newList<CascadingDropDownNameValue>();foreach (Services.serviceRow drin serviceTable){
if (dr.brsv == contextKey){
values.Add(newCascadingDropDownNameValue(dr.description, dr.brsv,true));}
else{
values.Add(newCascadingDropDownNameValue(dr.description, dr.brsv));}
}
return values.ToArray();
}
[WebMethod]publicCascadingDropDownNameValue[] GetClassesForService(string knownCategoryValues,string category){
StringDictionary kv =CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);if (!kv.ContainsKey("Service")){
returnnull;}
string serviceId = kv["Service"];classTableAdapter classAdapter =newclassTableAdapter();Services._classDataTable classTable = classAdapter.GetClassesByServiceId(serviceId);List<CascadingDropDownNameValue> values =newList<CascadingDropDownNameValue>();foreach (Services._classRow drin classTable){
values.Add(newCascadingDropDownNameValue(dr.description, dr._class ));}
return values.ToArray();}
[
WebMethod]publicCascadingDropDownNameValue[] GetClassesForService(string knownCategoryValues,string category,string contextKey){
StringDictionary kv =CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);if (!kv.ContainsKey("Service")){
returnnull;}
string serviceId = kv["Service"];classTableAdapter classAdapter =newclassTableAdapter();Services._classDataTable classTable;if (contextKey =="RegisterOnline"){
classTable = classAdapter.GetClassesByServiceIdNoPFPA(serviceId);
}
else{
classTable = classAdapter.GetClassesByServiceId(serviceId);
}
List<CascadingDropDownNameValue> values =newList<CascadingDropDownNameValue>();foreach (Services._classRow drin classTable){
values.Add(newCascadingDropDownNameValue(dr.description, dr._class));}
return values.ToArray();}
[WebMethod]publicCascadingDropDownNameValue[] GetRanksForClassAndService(string knownCategoryValues,string category){
StringDictionary kv =CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);if (!kv.ContainsKey("Service")){
returnnull;}
string serviceId = kv["Service"];if (!kv.ContainsKey("Class")){
returnnull;}
string classId = kv["Class"];rankTableAdapter rankAdapter =newrankTableAdapter();Services.rankDataTable rankTable = rankAdapter.GetRanksByClassIdAndServiceId(classId, serviceId);List<CascadingDropDownNameValue> values =newList<CascadingDropDownNameValue>();foreach (Services.rankRow drin rankTable)
{
//rankcode + ' - ' + rankname values.Add(newCascadingDropDownNameValue(dr.rankcode +'-'+ dr.rankname, dr.rankcode));}
return values.ToArray();}