【发布时间】: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