一个updatepanel中有两个下拉列表

时间:2014-08-04 09:45:51

标签: asp.net asp.net-ajax updatepanel

一个updatepanel中有两个下拉列表,两个都有autopostback = true 唯一的问题是,第一次下拉值改变时,调用了两个事件(ddlCountry_SelectedIndexChanged和ddlPackage_SelectedIndexChanged)。 在第一次之后,每件事情都会好起来,并且每次事件都会在相关下拉列表索引更改后调用。

这是我的代码:

<asp:UpdatePanel ID="updPackage" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlCountry" EventName="SelectedIndexChanged" />
        <asp:AsyncPostBackTrigger ControlID="ddlPackage" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <div class="divManagerBoxSection">
            <asp:Label CssClass="lblManagerBox" ID="Label1" runat="server" Text="کشور"></asp:Label>
            <asp:DropDownList AutoPostBack="true" CssClass="ddlManagerBox ddlCountry" ID="ddlCountry"
                OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" runat="server">
                <asp:ListItem Value="0" Enabled="false">انتخاب کنید</asp:ListItem>
                <asp:ListItem Value="1">ایران</asp:ListItem>
                <asp:ListItem Value="2">تایلند</asp:ListItem>
                <asp:ListItem Value="3">ترکیه</asp:ListItem>
                <asp:ListItem Value="4">روسیه</asp:ListItem>
            </asp:DropDownList>
        </div>
        <div class="divManagerBoxSection">
            <asp:Label CssClass="lblManagerBox" ID="Label2" runat="server" Text="پکیج"></asp:Label>
            <asp:DropDownList CssClass="ddlManagerBox ddlPackage" ID="ddlPackage" runat="server"
                AutoPostBack="true" OnSelectedIndexChanged="ddlPackage_SelectedIndexChanged">
                <asp:ListItem Value="0" Enabled="false">انتخاب کنید</asp:ListItem>
                <asp:ListItem Value="1">4 شب پاتایا 3 شب بانکوک</asp:ListItem>
                <asp:ListItem Value="2">3 شب پوکت 3 شب سامویی</asp:ListItem>
                <asp:ListItem Value="3">پکیج جدید ...</asp:ListItem>
            </asp:DropDownList>
        </div>
    </ContentTemplate>
</asp:UpdatePanel>

和C#:

        protected void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListItem lst = new ListItem("A", "0");
        ddlCity1.Items.Insert(ddlCity1.Items.Count, lst);
    }

    protected void ddlPackage_SelectedIndexChanged(object sender, EventArgs e)
    {
        ListItem lst = new ListItem("B", "0");
        ddlCity1.Items.Insert(ddlCity1.Items.Count, lst);
    }

在ddlCity上更改ddlCountry结果的值:

一个 乙 一个 一个 甲

并在ddlCity上更改ddlPackage的值:

一个 乙 乙 乙 乙

首次更改哪个下拉列值没有变化,两个事件都会运行。 任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

这是因为您在DropDownLists上没有默认值,因此在第一次调用Codebehind时认为“Null”更改为“A Value”(例如:4شبپاتایا3شببانکوک)。 值(4شبپاتایا3شببانکوک)在输出中显示为默认选择值,但在代码隐藏中不被视为选定值,并被标记为第一次调用中的更改。 在两个DropDownLists中,选择一个项目作为默认值,问题已解决。 像这样:

<div class="divManagerBoxSection">
    <asp:Label CssClass="lblManagerBox" ID="Label1" runat="server" Text="کشور"></asp:Label>
    <asp:DropDownList AutoPostBack="true" CssClass="ddlManagerBox ddlCountry" ID="ddlCountry"
        OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged" runat="server">
        <asp:ListItem Value="0" Enabled="false">انتخاب کنید</asp:ListItem>
        <asp:ListItem Value="1" Selected="True">ایران</asp:ListItem>
        <asp:ListItem Value="2">تایلند</asp:ListItem>
        <asp:ListItem Value="3">ترکیه</asp:ListItem>
        <asp:ListItem Value="4">روسیه</asp:ListItem>
    </asp:DropDownList>
</div>
<div class="divManagerBoxSection">
    <asp:Label CssClass="lblManagerBox" ID="Label2" runat="server" Text="پکیج"></asp:Label>
    <asp:DropDownList CssClass="ddlManagerBox ddlPackage" ID="ddlPackage" runat="server"
        AutoPostBack="true" OnSelectedIndexChanged="ddlPackage_SelectedIndexChanged">
        <asp:ListItem Value="0" Enabled="false">انتخاب کنید</asp:ListItem>
        <asp:ListItem Value="1" Selected="True">4 شب پاتایا 3 شب بانکوک</asp:ListItem>
        <asp:ListItem Value="2">3 شب پوکت 3 شب سامویی</asp:ListItem>
        <asp:ListItem Value="3">پکیج جدید ...</asp:ListItem>
    </asp:DropDownList>
</div>

查看两个DDL中第一个启用项目的Selected="True"