【问题标题】:two dropdowns in one updatepanel一个更新面板中有两个下拉菜单
【发布时间】:2014-08-04 09:45:50
【问题描述】:

在一个更新面板中有两个下拉菜单,都使用 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 结果的值:

一个 乙 乙 乙 乙

第一次更改哪个下拉值没有什么不同,两个事件都会运行。 任何帮助将不胜感激。

【问题讨论】:

  • 我的意思是下拉值改变
  • 您的更新面板是否在另一个更新面板中?如果没有,则不需要 UpdateMode="Conditional"。我会把它拿出来,将 ChildrenAsTriggers 设置为 true,删除触发器并尝试一下。
  • 谢谢,我删除了条件模式,并将 ChildrenAsTriggers 设置为 True,没有任何改变,我会用一些代码改进我的问题,你可以自己测试一下

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


【解决方案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>

查看Selected="True" 以获得两个 DDL 中的第一个启用项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 2021-05-02
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多