【问题标题】:Cascade DropDown not firing OnSelectIndexChanged eventCascade DropDown 未触发 OnSelectIndexChanged 事件
【发布时间】:2016-03-15 18:57:34
【问题描述】:

我有一个包含两个 DropDown 的页面。

<div class="block-container">
    <div class="fieldItem" style="margin-top: 10px;">
        <asp:Label ID="pistaServizioLabel" runat="server">PISTA/FAMIGLIA SERVIZIO </asp:Label>
        <asp:DropDownList ID="pistaServizio" AutoPostBack="true" OnSelectedIndexChanged="pistaServizio_SelectedIndexChanged" Style="width: auto;" runat="server" AppendDataBoundItems="true">
            <asp:ListItem Text="Selezionare un valore" Value="" />
            <asp:ListItem Text="Mobile" Value="Mobile" />
        </asp:DropDownList>
    </div>
</div>
<div class="block-container">
    <div class="fieldItem" style="margin-top: 10px;">
        <asp:Label ID="ambitoLabel" runat="server">AMBITO </asp:Label>
        <asp:DropDownList ID="ambito" AutoPostBack="true" OnSelectIndexChanged="ambito_SelectedIndexChanged" Style="width: auto;" runat="server" AppendDataBoundItems="true">
        </asp:DropDownList>
    </div>
</div>

在第一个中,当您选择一个值时,OnSelectIndexChanged 事件 (pistaServizio_SelectedIndexChanged) 会正确触发,它会使用多个 ListItem 填充第二个 DropDown。

因此,在 PostBack 之后,您填充了第二个 DropDown,但如果您从中选择一个值,它不会触发其 OnSelectIndexChanged 事件 (ambito_SelectedIndexChanged)。它应该记录一些内容但没有任何反应

这里有两个事件处理程序

protected void pistaServizio_SelectedIndexChanged(object sender, EventArgs e)
{
    logger.LogDebug("pistaServizio_SelectedIndexChanged"); 
    if (pistaServizio.SelectedValue != "")
    {
        uploadContainer.Visible = true;
        ambito.Items.Clear();
        ambito.Items.Add(new ListItem("Seleziona un valore", ""));
        ambito.Items.Add(new ListItem("Test", "Test"));
    }
    else
    {
        uploadContainer.Visible = false;
        ambito.Items.Clear();
    }
}

protected void ambito_SelectedIndexChanged(object sender, EventArgs e)
{
    logger.LogDebug("ambito_SelectedIndexChanged");
}

关于为什么第二个没有触发有什么建议吗?谢谢

编辑

我注意到问题不是级联事件,而是第二个 DropDown。 我在其中添加了两个列表项

 <asp:Label ID="ambitoLabel" runat="server">AMBITO </asp:Label>
<asp:DropDownList ID="ambito" AutoPostBack="true" OnSelectIndexChanged="ambito_SelectedIndexChanged" Style="width: auto;" runat="server">
    <asp:ListItem Text="Selezionare un valore" Value="" />
    <asp:ListItem Text="Test" Value="Test" />
</asp:DropDownList>

所以我忽略了第一个 DropDown 并直接从第二个中选择一个值。 同样在这种情况下, ambito_SelectedIndexChanged 没有触发

【问题讨论】:

  • 它是进行回发,只是不运行处理程序,还是根本不进行回发?
  • 它正在回发
  • 如果你在 logger.LogDebug 上设置一个断点,它会到达那个断点吗?此外,Web 表单对从 javascript 自动回发的控件使用了一种技巧...... __EVENTTARGET 和 __EVENTARGUMENT 表单变量包含服务器应该运行的控件名称和事件名称(两个下划线),因此您可以检查以确保 Web表单通过下拉菜单正确识别回发。有时这就是原因......另外,是否涉及更新面板?
  • 感谢您的宝贵时间。它没有命中 logger.LogDebug 断点,我也没有使用任何更新面板。回发正在完成,因为我记录了布尔值 isPostBack 并且说 True
  • __EVENTTARGET 具有正确的值 ct100$MainContent$ambito

标签: c# asp.net dropdown


【解决方案1】:

好的,解决了。代码后面有些东西坏了。我结束了删除“ambito”DropDown,创建了一个新的,现在一切都很好。谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2010-11-03
    • 1970-01-01
    • 2021-06-18
    相关资源
    最近更新 更多