1

我正在尝试使用 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
{
    ....
}
4

2 回答 2

2

GetDropDownContents方法必须是静态的

于 2012-11-04T21:54:33.167 回答
0

您的页面上是否有启用了 pagemethods 的脚本管理器?

于 2012-11-04T01:53:25.980 回答