1

使用 ASP.Net 的级联下拉菜单

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

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

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

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

在第一次运行期间一切似乎都在工作,但是当我尝试组合下拉菜单时问题就来了。以下是我遇到的问题:

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

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

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

谢谢您的帮助。

4

2 回答 2

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) 
{
   ..;

}
于 2012-09-03T08:14:08.990 回答
0

做以下事情:

1)在用户选择第一个下拉菜单之前,应禁用第二个和第三个下拉菜单,然后在用户选择第二个下拉菜单时启用第二个下拉菜单,然后启用第三个下拉菜单。

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

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

于 2012-09-03T08:12:39.423 回答