2009-12-01 95 views
4

我完全沉迷于此,并会真正感谢任何帮助。ASP.net更新面板事件问题

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

还有一个下拉框来过滤数据。改变这个确实会启动一个回帖,但是没有任何反应。下拉框会回到默认值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对页面和面板启用 - 不知道是否有其他任何东西可能会覆盖/破坏它。

我有没有提到我讨厌激情更新面板?因为我讨厌激情更新面板。

+0

我目前正在与看起来与您完全相同的问题和场景挣扎(即dropdownlist的onselection在updatepanel内的用户控件内未触发,但autopostback正在触发)。我一直在这里检查,希望有人提供一些有用的信息。如果我自己发现了一些有用的东西,我一定会发布它。 – 2009-12-02 20:00:30

+0

我找到了我的问题的答案。请参阅下文(http://stackoverflow.com/questions/1829062/event-issue-with-asp-net-update-panel/1836412#1836412) – 2009-12-02 22:47:00

回答

1

二为价格的一个答案:

  1. 你叫你Page_LoadDataBind()?如果你在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> 
    
+0

非常感谢您的快速响应。下拉列表位于更新面板内的控件内部。我加倍检查并且页面加载或页面预加载中不发生数据绑定。一切都在一个!IsPostBack和数据绑定功能实际上发生在按钮上的其他地方的形式。 – 2009-12-01 21:41:33

+0

dropdownGroup_changed是否在用户控件或页面中定义? – 2009-12-01 21:44:00

+0

它在我的userControl中 - 标记为受保护的。 – 2009-12-01 21:46:52

1

我建议检查“值”属性对于'DropDownList'控件中的每个'ListItem'。如果他们都是相同即使“文本”属性是不同的,那么“OnSelectedIndexChanged”,因为ASP.NET不能告诉如果有什么发生了变化,将不会触发所有(有关详细信息,请参阅this related question

这是我的问题的真正原因,即使我也在'UpdatePanel'内有'DropDownList'的'UserControl'并且'AutoPostBack'按预期发射。我认为UpdatePanel是罪魁祸首,但事实并非如此。即使它们具有不同的“文本”值,我的DropDownList中的每个项目都具有相同的“10”基础值。我改变他们每个人都有一个独特的价值,然后允许OnSelectedIndexChanged事件触发,从而解决问题。

+0

我真的很希望这是它 - 不幸的是,底层的价值都是截然不同的,所以它似乎并不是罪魁祸首。尽管绑定值完全不同,但该值在回发期间始终会恢复为默认值。我还测试了一个文本框以防万一,它似乎有相同的问题。再次感谢你,我欣赏我现在可以获得的所有想法。 – 2009-12-03 03:46:02

+0

@ apocalype9-抱歉听到这也没有帮助。 – 2009-12-03 18:48:54

0

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