我的问题是代码隐藏看起来像它工作并且根据调试器,它确实(没有错误或异常)。不幸的是,它实际上不适用于我的 asp.net webforms 网页,DropdownList 实际上并没有填充 ListBox 的选定项目。这真的应该很简单,但显然不是。
我的研究表明,Listboxes 和 DropDownList 应该在 UpdatePanels 内部,并且作为触发器的子项需要设置为 true,并且在 ScriptManager 的帮助下,它会拦截回发请求并仅执行部分页面更新。然而,当这不起作用时,我尝试直接调用 updatepanels.update() 方法,但这也不起作用。
这是我的 C# 代码。
protected void GroupList_SelectedIndexChanged(object sender, EventArgs e)
{
updategroupEntry();
}
protected void updategroupEntry()
{
EnterAGroup.Items.Clear();
foreach (ListItem li in GroupList.Items)
{
if (li.Selected)
{
EnterAGroup.Items.Add(li);
}
}
OptionsUpdater.Update();
OverallUpdater.Update();
}
在我的代码中,我使用了嵌套更新面板,此处显示了整体/周围的面板,我还在第二个 DropdownList 中包含了该面板的结束标签。这是第一个代码段。
<asp:UpdatePanel ID="OverallUpdater" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
//irrelevant code omitted
<asp:Listbox AutoPostback="True" ID="GroupList" runat="server" Width="166px" SelectionMode="Multiple" OnSelectedIndexChanged="GroupList_SelectedIndexChanged" DataSourceID="GroupSource" DataTextField="GroupName" DataValueField="GroupID">
</asp:Listbox>
<asp:SqlDataSource ID="GroupSource" runat="server"
ConnectionString="<%$ ConnectionStrings:ACESConnectionString %>"
SelectCommand="SELECT [GroupName], [GroupID] FROM [PrimaryGroup] ORDER BY [GroupName]"></asp:SqlDataSource>
//more code omitted
<%--End of Options Panel --%>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="viewapps" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="UpdateButton" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="FilterButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
在我的 aspx 页面中,我的 DropDownList 周围有这段代码。
<asp:UpdatePanel ID="OptionsUpdater" UpdateMode="Conditional" runat="server" ChildrenAsTriggers="true" ViewStateMode="Enabled">
<ContentTemplate>
//other code omitted for brevity.
<asp:TableCell>
<asp:DropDownList runat="server" ID="EnterAGroup" BackColor="PaleVioletRed" AutoPostBack="true"></asp:DropDownList>
</asp:TableCell>
//other code omitted for brevity.
</ContentTemplate>
</asp:UpdatePanel>
所以代码隐藏说它的作品,但它只是没有在网页上更新。如何让它正常工作?
我很乐意根据要求提供更多代码。此外,如果您需要测试代码,我建议您用某个表中的 2 列替换您自己的 SqlDataSource。
更新 我已经尝试过 Cherian M Paul 的想法,它产生了奇怪的结果,当我从组中选择所有项目但不仅仅是少数项目时,它只能中途工作。
选择所有组时,这是中途工作。
这是仅选择一些时它不起作用的图像。
更新
经过进一步调查,有一点断开连接,网页上的点击不再到达代码隐藏。
我有这个断线的视频。基本上,最后没有多少点击会触发我的代码隐藏中的事件。
https://docs.google.com/file/d/0B12ZVcp_VQ_xR3c0cU1LaXd5Vkk/edit?usp=sharing