ASP.net Update Panel的事件问题

4
我对此一无所知,希望能够得到任何帮助。
我正在编写一个用户控件,该控件位于更新面板内部。表单上有一个按钮用于加载某些数据,这部分功能正常运行。
还有一个下拉框用于过滤数据。更改选项会触发回发,但是没有任何反应。下拉框返回其默认值,OnSelectedIndexChanged函数从未被调用。
我在page_prerender和page_preload中设置了断点,两者都被触发,确实进行了回发,但是dropdownGroup_changed函数中的断点从未被触发。
删除更新面板可以解决该问题,但会破坏页面的其他部分,因此我不能将其用于除测试之外的任何内容。
我还验证了prerender / page load中没有重置页面状态的内容。
以下是更新面板代码:
<asp:UpdatePanel ID="UpdatePanel6" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >    
<ContentTemplate>   
    <ucControlName:ControlName ID="ControlName1" runat="server" />   
</ContentTemplate>
</asp:UpdatePanel>

这里是需要讨论的下拉菜单 - 它位于用户控件内部

<asp:DropDownList ID="dropdownGroup" runat="server" Visible="false" AutoPostBack="true" OnSelectedIndexChanged="dropdownGroup_changed"></asp:DropDownList>

当问题发生时,它当然是可见和数据绑定的。


更多信息- 向控件添加了一个硬编码下拉列表(排除愚蠢的数据绑定问题)和一个文本框。 我有同样的问题。

似乎事件没有触发,因为就.NET而言,值从未改变过。 我已在page_init和page_load期间检查了控件 - 值始终相同。

按钮可以工作,但其他控件不能工作,这使我想到可能存在视图状态问题,但我无法确定是什么原因导致的。 页面和面板启用了视图状态-不知道是否还有其他东西会覆盖/破坏它。

我提到我非常讨厌UpdatePanel了吗? 因为我非常讨厌UpdatePanel。


我目前正在与你遇到的完全相同的问题和场景(即在UpdatePanel内的用户控件中,DropDownList的OnSelectionChanged事件未能触发,但AutoPostBack事件却被触发)苦苦挣扎。我一直在这里检查,希望有人提供一些有用的信息。如果我发现了有效的解决方法,肯定会发布出来的。 - Ray
我找到了解决我的问题的答案。请参见下面的链接(https://dev59.com/mUrSa4cB1Zd3GeqPXpmW#1836412)。 - Ray
3个回答

1

一份价格,两个答案:

  1. 你在 Page_Load 中调用了 DataBind() 吗?如果你在 PostBack 上这样做,你将会失去事件。请使用以下代码替换调用:

    if (!IsPostBack) { 
        DataBind();
    }
    
  2. 如果你的 DropDownListUpdatePanel 之外,你需要添加一个 Trigger,如下所示:

    <asp:UpdatePanel ID="UpdatePanel6" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >    
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="dropdownGroup" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>   
        <ucControlName:ControlName ID="ControlName1" runat="server" />   
    </ContentTemplate>
    </asp:UpdatePanel>
    

非常感谢您的快速回复。下拉列表在控件内部,该控件位于更新面板内部。我仔细检查过了,数据绑定不会发生在页面加载或页面预加载中。一切都在 !IsPostBack 中,并且数据绑定函数实际上在表单其他位置的按钮按下时发生。 - Kelly Robins
下拉分组的更改事件是在您的用户控件中定义还是在页面上定义的? - John Christensen

1

我建议检查'DropDownList'控件中每个'ListItem'的'Value'属性。如果它们都是相同的,即使'Text'属性不同,'OnSelectedIndexChanged'也不会触发,因为ASP.NET无法判断是否有任何更改(有关更多信息,请参见此相关问题

这才是我的问题的真正原因,尽管我也有一个'UserControl',其中包含一个'DropDownList'和一个'UpdatePanel',而'AutoPostBack'按预期触发。我以为是UpdatePanel的问题,但事实并非如此。我的DropDownList中的每个项目都具有相同的基础值“10”,即使它们具有不同的'Text'值。我将它们更改为具有唯一值,然后允许OnSelectedIndexChanged事件触发,从而解决了问题。


我真的很希望这就是问题所在-不幸的是,底层值都是不同的,因此它似乎不是罪魁祸首。虽然绑定的值都不同,但在 postback 期间该值始终恢复为默认值。我还测试了一下文本框,以防万一,结果似乎也有同样的问题。再次感谢-我现在非常感激所有的想法。 - Kelly Robins
@apocalype9- 很抱歉听到这个也没有帮助。 - Ray

0
你尝试过在数据绑定后使用 UpdatePanel.Update(); 吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接