C#ASP.NET的级联下拉列表

时间:2012-01-19 20:42:24

标签: c# jquery

我正在尝试创建一些级联下拉菜单。我通过C#页面加载我的状态加载很好。我似乎无法得到任何东西来装载城市。在城市之后,我将添加另一个下拉菜单,但是一旦我开始工作,我就可以解决这个问题。

我在Chrome错误中注意到“Default.aspx / LoadCitiesByState 500(内部服务器错误)”。

C#

    protected void LoadStates()
{
    // Populate State dropdown box
    ListItem li = new ListItem();
    li.Value = "0";
    li.Text = "Select One";

    DataSet dsState = SharedData.GetStates();
    ddlState.DataSource = dsState.Tables[0].DefaultView;
    ddlState.DataValueField = "ab";
    ddlState.DataTextField = "name";
    ddlState.DataBind();
    ddlState.Items.Insert(0, li);
}


[WebMethod]
protected void LoadCitiesByState(string state)
{
    ListItem li = new ListItem();
    li.Value = "0";
    li.Text = "Select One";

    DataTable dt = new DataTable();
    dt = SharedData.GetCities(state);
    ddlCity.DataSource = dt.Rows[0].Table.DefaultView;
    ddlCity.DataValueField = "ListCity";
    ddlCity.DataTextField = "ListCity";
    ddlCity.DataBind();
    ddlCity.Items.Insert(0, li);
}

标记

<asp:DropDownList ID="state" runat="server" MaxLength="50" Style="width: 200px;" />

<asp:DropDownList ID="city" runat="server" MaxLength="50" Style="width: 200px;" /> 



function loadCities(selectedItem) {
            $.ajax({
                type: "POST",
                url: "Default.aspx/LoadCitiesByState",
                data: "selectedItem",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                async: true,
                success: function Success(data) {
                    alert(selectedItem);
                }
            });

3 个答案:

答案 0 :(得分:1)

我个人认为级联下拉最好通过服务器端代码处理,而不是通过javascript(处理ASP.NET时)。

对于状态,基本模型将是autoPostBack = true,并且on selected选定的索引会更改处理程序,然后更改Cities中的项目。

如果你不想刷新整个页面(我完全没有责备你),那么只需将两个下拉包装在UpdatePanel中,瞧,所有的AJAX请求等都得到了解决。你。

是的,它的表现不如你在这里做的那么好,但它更快/更容易/更安全,而且通常足够好(如果你使用UpdatePanel)。

答案 1 :(得分:0)

我发现您未在autopostback中将asp:DropDownList设置为 true

答案 2 :(得分:0)

虽然使用回发最容易做到这一点,但完全做客户端并不是特别复杂,而且实际上并不想进入更新面板工作......只是不太好。

问题必须是:

 data: "selectedItem", 

我不完全确定正确的咒语是什么,但我相当确定不是它。

本文看起来很有帮助:

http://www.mikesdotnetting.com/Article/97/Cascading-DropDownLists-with-jQuery-and-ASP.NET