Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理“已更新”的UpdatePanel;“链锁”;一起在asp.net中?_Asp.net_Updatepanel - Fatal编程技术网

处理“已更新”的UpdatePanel;“链锁”;一起在asp.net中?

处理“已更新”的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

很像当你在网站上寻找支持或其他东西时,你从第一个列表框(比如硬盘)中选择产品,这会触发第二个列表框并填充更多选项(比如“固态”、“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中,并设置为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服务,而我在代码隐藏中填充我的列表