处理在asp.net中“链接”在一起的updatepanel?

时间:2009-10-05 11:35:04

标签: asp.net updatepanel

就像你在网站上寻找支持一样,你从第一个列表框(比如硬盘)中选择产品,它会触发并填充第二个列表框,其中包含更多选项(例如,“固态”,“ SATA“),等等......

我遇到的问题是,当您从第二个列表框中选择应该填充第三个列表框的内容时,回发也会触发第一个列表框,然后将第二个列表框重新填充回其默认值。

例如

[下拉1](包含A B C D E)

[DropDown 2](下拉列表1中的A有选项X Y Z)

[下拉3] ......

如果选择A,则下拉2填充XYZ。你选择Z,它应该更新dropdown3,但是回发也会再次触发下拉列表1,它会取代Dropdown 2的内容并将值重置为X.

我正在寻找一个优雅的解决方案。如果下拉列表1已更改,我有一个说只重新填充下拉列表2,但它意味着在页面回发之前跟踪下拉列表1。

每个下拉列表都在更新面板中,并设置为autopostback = true,每个更新面板的触发器中都有前一个列表框。

5 个答案:

答案 0 :(得分:2)

首先检查第二个TextBox是否不是第一个UpdatePanel的触发器,如果​​是,则从第一个更新面板的Triggers Collection中删除它。

以下是关键概念:

如果你有两个单独的标签,你应该在第二个更新面板中放置一个触发器标签,并插入一个AsyncPostBackTrigger和第一个下拉列表的controlID,这里是一个简单的示例

<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>

答案 1 :(得分:0)

我只是将所有下拉列表放在同一个更新面板中。它可能效率不高,但它可能足够好,当然也需要更少的代码行。

答案 2 :(得分:0)

为什么不尝试使用AjaxControl Toolkit CascadingDropDown。它似乎符合您的需求。

此外,这将提高性能,因为回发将不会发送所有页面信息(与更新面板一样)。

答案 3 :(得分:0)

我想通了 - 我可以使用ScriptManager1.AsyncPostBackSourceElementID来检查导致触发器的原因,并使其仅为回发和第一个下拉框刷新。

答案 4 :(得分:0)

也许我在想太简单了,但为什么你不能只处理所有这些事件......作为事件?仅在初始Page_Load上填充DDL1。仅在DDL1.SelectedIndexChanged上填充DDL2。仅在DDL2.SelectedIndexChanged ...

上填充DDL3