ASP.Net中的级联下拉不能正常工作

时间:2012-09-03 08:07:21

标签: asp.net

Cascading dropdown using ASP.Net

嗨 - 我知道这听起来很简单,但我无法实现某些功能。请参考随附的屏幕截图。这就是我在做的事情:

  1. 在页面加载时,我正在加载产品/服务的第一个下拉列表
  2. 选择产品下拉列表时,我会填充第二个下拉列表“类别”。我正在进行数据库调用以实现此目的。
  3. 根据选择的类别我填写第三个下拉价格。我正在进行数据库调用以获取此下拉列表的信息。

  4. 根据第三个(价格)下拉列表的选择,我隐藏/显示面板。

  5. 每个下拉列表都会进行回发以调用数据库以获取后续下拉列表的详细信息。

    在第一次运行期间似乎一切正常,但是当我尝试下拉组合时会出现问题。以下是我遇到的问题:

    1. 如果我从Dropdown1和2中选择不同的选项,那么一旦呈现的面板不会消失。
    2. 在后续运行后,每次回发后都会累加这些值。例如,如果我在产品/服务下拉列表中有产品“玩具车”,它现在出现两次,依此类推。

    3. 如果用户选择默认选项“选择产品”,“选择类别”等,则应重置整个层次结构。例如,如果产品下拉列表中的先前选择是“玩具车”,现在我选择默认选项“选择产品”。它应该重置“类别”,价格和面板可见性。

    4. 请让我知道如何做到这一点。

      感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在三个DropDownLists上

1您设置AutoPostBack =“true”

2您定义OnSelectIndexChanged

<asp:dropdownlist id="ddl1" runa="server" Autopostback="true" onselectindexChanged="ddl1_selectindexChanged"/>

<asp:dropdownlist id="ddl2" runa="server" Autopostback="true" onselectindexChanged="ddl2_selectindexChanged"/>

<asp:dropdownlist id="ddl3" runa="server" Autopostback="true" onselectindexChanged="ddl3_selectindexChanged"/>

您必须使用此策略定义page_load

If(! IsPostBack)
{
  //Bind dropdownlist
}

在每个selectindexChanged上,获取值并在数据库中执行选择,并绑定您的下拉列表。

void ddl1_selectindexChanged(Object sender, EventArgs e) 
{

//Get Selected Values

  //For examlpe you can use SelectedValue property
  var value1 = ddl1.SelectedValue;

  //Request your database

  //And bind your dropdownlist of sub categories


  ...
}

void ddl2_selectindexChanged(Object sender, EventArgs e) 
{
   ...
}


void ddl3_selectindexChanged(Object sender, EventArgs e) 
{
   ..;

}

答案 1 :(得分:0)

做以下事情:

1)应该禁用第二个和第三个下拉列表,直到用户选择第一个下拉列表,然后在用户选择第二个下拉列表然后启用第三个下拉列表时启用第二个下拉列表。

2)在回发后,清除DropDownList中的Items,然后再将它们与数据源绑定。只需为每个下拉列表创建一个函数,并在通过调用Dropdownlist的Clear方法清除DropDownList后在PostBack上调用它。

3)要重置整个层次结构,请将所有下拉列表的SeletecedIndex设置为零或-1;

相关问题