显示/隐藏其他下拉列表值中的下拉列表值已更改

时间:2013-07-30 15:25:25

标签: c# asp.net

我想显示/隐藏我的ddlDuration的一些值,这些值将根据我想要的ddlLOanType而改变。例如,如果他们从我的下拉列表中选择个人贷款类型,我希望它显示ddlDuration中的所有值,如果我选择新车贷款,我希望它显示这些值“36,48,60”。我不太确定我应该用它做什么。谢谢你的帮助

Type: <asp:DropDownList ID="ddlLoanType" runat="server" AutoPostBack="True" 
        onselectedindexchanged="ddlLoanType_SelectedIndexChanged">
        <asp:ListItem Value="0">Select</asp:ListItem>
        <asp:ListItem Value="1">Personal Loan</asp:ListItem>
        <asp:ListItem Value="2">New Car Loan</asp:ListItem>
        <asp:ListItem Value="3">Used Car Loan</asp:ListItem>
    </asp:DropDownList>

Duration:<asp:DropDownList ID="ddlDuration" runat="server" 
        onselectedindexchanged="ddlDuration_SelectedIndexChanged" 
        AutoPostBack="True">
        <asp:ListItem Value="12">12</asp:ListItem>
        <asp:ListItem Value="24">24</asp:ListItem>
        <asp:ListItem Value="36">36</asp:ListItem>
        <asp:ListItem Value="48">48</asp:ListItem>
        <asp:ListItem Value="60">60</asp:ListItem>
    </asp:DropDownList>

3 个答案:

答案 0 :(得分:3)

  protected void ddlLoanType_SelectedIndexChanged(object sender, EventArgs e)
        {
             if (ddlLoanType.SelectedValue =="2")
            {
                ddlDuration.Items.FindByValue("12").Enabled = false;
                ddlDuration.Items.FindByValue("24").Enabled = false;


            }
        }

然而,这不是解决此问题的正确方法,在编写代码时,您不应该有任何依赖性,并且应该具有足够的灵活性以便将来进行修改。如果有一天逻辑发生变化而不是将列表项添加到您的aspx page os某天银行决定改变持续时间?尝试用dropdownlist绑定你的数据,其中一些id可以识别哪种贷款类型将在下拉列表中显示哪些值。

答案 1 :(得分:1)

有很多选项,但您不应该从标记中硬编码的项目开始。

快速解决方案:

为每个数字集合设置一个私有List<string>变量(我说字符串而不是int,因为ListItems将转换为字符串)。

例如,

private List<string> personalLoanIds = new List<string> () {"12", "24"};

ddlLoanType更改为个人贷款时,您可以将ddlDuration的数据源设置为personalLoanIds,然后调用DataBind()方法。

答案 2 :(得分:1)

您已经在处理ddlLoanType_SelectedIndexChanged事件,您需要做的就是添加/删除应用/不应用的值并重新绑定数据。

以下是一个例子:

protected void ddlLoanType_SelectedIndexChanged (EventArgs e)
{
       if(ddlLoanType.SelectedValue=="1") //show all
       {
           ddlDuration.DataSource=new int []{ 12,24,36,48,60 } ;
           ddlDuration.DataBind();
       }
       else if(ddlLoanType.SelectedValue=="2") //car loan
       {
           ddlDuration.DataSource=new int []{ 36,48,60 } ;
           ddlDuration.DataBind();
       }
}