在asp.net中加载3个基于彼此的下拉列表

本文关键字:于彼此 下拉列表 3个 加载 asp net | 更新日期: 2023-09-27 18:21:51

我需要基于彼此加载下拉列表。我做了如下:

<asp:DropDownList ID="drblLanguages" runat="server" OnSelectedIndexChanged="drblLanguages_SelectedIndexChanged" AutoPostBack="true">
        </asp:DropDownList>
  <asp:DropDownList ID="DrpCategory" runat="server" OnSelectedIndexChanged="DrpCategory_SelectedIndexChanged" AutoPostBack="true" EnableViewState="true">
        </asp:DropDownList>
 <asp:DropDownList ID="DrpEmailTemplate" runat="server" Enabled="false" OnSelectedIndexChanged="DrpEmailTemplate_SelectedIndexChanged" AutoPostBack="true">
        </asp:DropDownList>

我的后端代码如下:

  protected void drblLanguages_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                LoadDataForCategoty();               
            }
            catch (Exception ex)
            {
                SendToErrorPage(ex);
            }
        }
   protected void DrpCategory_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                    LoadEmailTemplateToDropDown();
            }
            catch (Exception ex)
            {
                SendToErrorPage(ex);
            }
        }

In-Page_load事件

   protected override void OnInit(EventArgs e)
     {
        try
        {              
            LoadLanguageDropdowns();
        }
        catch (Exception ex)
        {
            SendToErrorPage(ex);
        }
     }

在此处,当语言发生更改时,将加载相关类别。但当类别改变时,它总是选择第一条记录(索引-1),并且它调用CCD_ 1事件而不是CCD_。下拉列表似乎是从头开始初始化的。我该如何解决此问题?

在asp.net中加载3个基于彼此的下拉列表

if(!IsPostBack)
{
    LoadLanguageDropdowns();
}

你试试这个吗?您应该在Page_load中加载下拉列表,而不是在OnInit中。。这将只在第一次打开时加载你的下拉菜单,你的问题不应该出现。

编辑:你有三个下拉

        <asp:DropDownList runat="server" ID="LanguageDdl"  OnSelectedIndexChanged="LanguageDdl_SelectedIndexChanged" DataTextField="Title" DataValueField="ID" AutoPostBack="true">
        </asp:DropDownList>
        <asp:DropDownList runat="server" ID="CategoryDdl" OnSelectedIndexChanged="CategoryDdl_SelectedIndexChanged" DataTextField="Title" DataValueField="ID" AutoPostBack="true">
        </asp:DropDownList>
        <asp:DropDownList runat="server" ID="TemplateDdl" OnSelectedIndexChanged="TemplateDdl_SelectedIndexChanged" DataTextField="Title" DataValueField="ID" AutoPostBack="true">
        </asp:DropDownList>

代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            LanguageDdl.DataSource = new Varmebaronen.AppCode.BO.Object().GetList();
            LanguageDdl.DataBind();
        }
    }
    protected void LanguageDdl_SelectedIndexChanged(object sender, EventArgs e)
    {
        //if query the database for dataSource like in my case here you can
        // take value of the languagedropdown and fetch the category for the current language
        CategoryDdl.DataSource = new Varmebaronen.AppCode.BO.Category().GetList();
        CategoryDdl.DataBind();
    }
    protected void CategoryDdl_SelectedIndexChanged(object sender, EventArgs e)
    {
        TemplateDdl.DataSource = new Varmebaronen.AppCode.BO.Product().GetList();
        TemplateDdl.DataBind();
    }
    protected void TemplateDdl_SelectedIndexChanged(object sender, EventArgs e)
    {
    }