处理“已更新”的UpdatePanel;“链锁”;一起在asp.net中?
很像当你在网站上寻找支持或其他东西时,你从第一个列表框(比如硬盘)中选择产品,这会触发第二个列表框并填充更多选项(比如“固态”、“SATA”),等等 我遇到的问题是,当您从第二个列表框中选择应该填充第三个列表框的内容时,回发也会触发第一个列表框,然后将第二个列表框重新填充回其默认值 例如 [下拉列表1](包含一个B C D E) [下拉列表2](下拉列表1中的A具有选项X Y Z) [下拉列表3] 如果选择A,则下拉列表2将填充XYZ。选择Z,它应该更新dropdown3,但回发也会再次触发dropdown1,它会替换dropdown2的内容并将值重置回X 我正在寻找一个简单的解决办法。我曾经说过,如果dropdown 1发生了变化,只需重新填充dropdown 2,但这意味着在页面发回之前跟踪dropdown 1是什么处理“已更新”的UpdatePanel;“链锁”;一起在asp.net中?,asp.net,updatepanel,Asp.net,Updatepanel,很像当你在网站上寻找支持或其他东西时,你从第一个列表框(比如硬盘)中选择产品,这会触发第二个列表框并填充更多选项(比如“固态”、“SATA”),等等 我遇到的问题是,当您从第二个列表框中选择应该填充第三个列表框的内容时,回发也会触发第一个列表框,然后将第二个列表框重新填充回其默认值 例如 [下拉列表1](包含一个B C D E) [下拉列表2](下拉列表1中的A具有选项X Y Z) [下拉列表3] 如果选择A,则下拉列表2将填充XYZ。选择Z,它应该更新dropdown3,但回发也会再次触发dr
每个下拉列表都位于updatepanel中,并设置为autopostback=true,每个updatepanel的触发器中都有上一个列表框。我只需将所有下拉列表放在同一个更新面板中即可。它可能没有那么高效,但可能已经足够好了,而且所需的代码行肯定更少。为什么不试试AjaxControl工具包呢。它似乎适合你的需要
此外,这将提高性能,因为回发不会发送所有页面信息(与更新面板一样)。我找到了答案-我可以使用ScriptManager1.AsyncPostBackSourceElementID检查触发的原因,并使其仅刷新回发和第一个下拉框。也许我认为太简单了,但你为什么不直接处理这些事件。。。作为事件?仅在初始
页面加载时填充DDL1
。仅在DDL1上填充DDL2。已选择的索引已更改。仅在DDL2上填充DDL3。SelectedIndexChanged
..首先检查第二个文本框是否不是第一个UpdatePanel的触发器,如果是,则将其从第一个更新面板的触发器集合中删除
关键概念如下:
如果您有两个单独的标记,您应该在第二个更新面板中放置一个触发器标记,并插入一个带有第一个dropdownlist的controlID的AsyncPostBackTrigger,下面是一个简单的示例:
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="TxtBox1" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="TxtBox2" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="TxtBox1" />
</Triggers>
</asp:UpdatePanel>
不幸的是,在我的情况下,下拉列表在页面上完全不同的位置,因此我无法真正做到这一点,除非我将整个页面都打包在一个页面中。啊,好的。然后我会使用Gabriel的答案。这看起来很有趣,我不仅仅是填充下拉列表,而是用最终的下拉列表更新各种信息(你可以想象,我示例中的最后一个下拉列表将填充另一个部分,其中包含具体的细节,如品牌、价格等)归根结底,当我在updatepanel的下拉列表中选择某个内容时,它所在的updatepanel会触发加载事件。然后,也许您可以处理最后一个下拉列表,并将其用作up的异步触发器。这样,您将只有一个更新面板,并且下拉列表不会受到往返服务器的影响。我可能会尝试它,但它使用Web服务,而我在代码隐藏中填充我的列表