ASP.net更新面板的事件问题

时间:2009-12-01 21:30:22

标签: asp.net events updatepanel

我对此感到非常难过,非常感谢任何帮助。

我正在处理位于更新面板内的用户控件。表单上有一个按钮,可以加载一些数据。这工作正常。

还有一个用于过滤数据的下拉框。更改此功能确实会启动回发,但没有任何反应。下拉框返回默认值,永远不会调用OnSelectedIndexChanged函数。

我在page_prerender和page_preload中放置了断点,并且两者都被击中了帖子肯定会发生。带有dropdownGroup_changed函数的断点永远不会被命中。

删除更新面板可以解决问题,但是它会破坏页面的其余部分,因此我不能将其用于除测试之外的任何其他内容。

我还验证了我的预渲染/页面加载中没有任何内容正在重置页面的状态。

以下是更新面板代码:

<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期间检查了控件 - 值总是一样的。

按钮工作但其他控件不会让我认为某处存在视图状态问题,但我无法理解导致它的原因。为页面和面板启用了Viewstate-不知道是否还有其他任何内容可能覆盖/损坏它。

我是否提到我讨厌激情更新面板?因为我讨厌激情更新面板。

3 个答案:

答案 0 :(得分:1)

一个价格的两个答案:

  1. 您是否在DataBind()中致电Page_Load了?如果您在PostBack上执行此操作,则会丢失事件。用以下内容替换呼叫:

    if (!IsPostBack) { 
        DataBind();
    }
    
  2. 如果您的DropDownList位于UpdatePanel之外,则需要添加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>
    

答案 1 :(得分:1)

我建议检查'DropDownList'控件中每个'ListItem'的'Value'属性。如果它们都是相同的,即使'Text'属性不同,那么'OnSelectedIndexChanged'根本不会触发,因为ASP.NET无法判断是否有任何更改(参见this related question了解更多信息。)

这是我问题的真正原因,尽管我也有'UserPatrol'在'UpdatePanel'中有'DropDownList'并且'AutoPostBack'按预期触发。我认为UpdatePanel是罪魁祸首,但事实并非如此。我的DropDownList中的每个项目都具有相同的基础值“10”,即使它们具有不同的“文本”值。我将它们更改为每个都有一个唯一值,然后允许OnSelectedIndexChanged事件触发,从而修复问题。

答案 2 :(得分:0)

您是否尝试过UpdatePanel.Update();在您的数据绑定之后。​​