AjaxControlToolkitの非常に基本的なCascadingDropDownを使用しようとしています。私が実装しようとしているのは、ユーザーがドロップダウンから「州」と「市」を選択できるようにすることです。CascadingDropDownコードを以下に示します。
State : <asp:DropDownList ID="DdlState" runat="server" />
<asp:CascadingDropDown ID="CddState" runat="server" TargetControlID="DdlState" Category="State"
EmptyText="Select State" EmptyValue="0" ServiceMethod="GetDropDownContents"
/>
City : <asp:DropDownList ID="DdlCity" runat="server" />
<asp:CascadingDropDown ID="CddCity" runat="server" TargetControlID="DdlCity" ParentControlID="DdlState" Category="City"
EmptyText="Select City" EmptyValue="0" ServiceMethod="GetDropDownContents"
/>
そしてこれが私がコードビハインドに持っているものです
[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public CascadingDropDownNameValue[] GetDropDownContents(string knownCategoryValues, string category) {
if (category.Equals("State")) {
StateManager stateManager = new StateManager(null);
List<CascadingDropDownNameValue> states = new List<CascadingDropDownNameValue>();
foreach (State state in stateManager.GetQueryableStates().ToList()) {
states.Add(new CascadingDropDownNameValue(state.Name, state.Id.ToString()));
}
return states.ToArray();
} else {
CityManager cityManager = new CityManager(null);
List<CascadingDropDownNameValue> cities = new List<CascadingDropDownNameValue>();
foreach (City city in cityManager.GetQueryableCities()
.Where(c => c.State.Id == 1))) {
cities.Add(new CascadingDropDownNameValue(city.Name,city.Id.ToString()));
}
return cities.ToArray();
}
}
上記のコードは500内部サーバーエラーで失敗しています。フィドラーを使用すると、次のエラー「不明なWebメソッドGetDropDownContents」が表示されます。しかし、コードビハインドファイルにはすでにWebメソッドGetDropDownContents()があり、[WebMethod]としてもマークされています。
それで、なぜpopulateドロップダウンリクエストは、コードビハインドファイルにあるWebメソッドを見つけられないのですか?
更新 ここにデモCascadingDropDownへのリンクがあります
Update-2 クラス宣言。
public partial class Index : System.Web.UI.Page
{
....
}