我正在尝试使用 Ajax Control Toolkit 中的一个非常基本的 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 Internal Server Error 而失败。使用 fiddler 我可以看到以下错误"Unknown web method GetDropDownContents"。但是我的代码隐藏文件中已经有了 Web 方法 GetDropDownContents(),并且也被标记为 [WebMethod]。
那么,为什么填充下拉请求找不到我在代码隐藏文件中的 Web 方法。
更新 这里是演示CascadingDropDown的链接
Update-2 类声明。
public partial class Index : System.Web.UI.Page
{
....
}