【问题标题】:Event issue with ASP.net Update PanelASP.net 更新面板的事件问题
【发布时间】:2010-12-22 04:37:04
【问题描述】:

我对此完全感到困惑,非常感谢任何帮助。

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

还有一个用于过滤数据的下拉框。更改此设置确实会启动回发,但没有任何反应。下拉框回到它的默认值,永远不会调用 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 - 不知道是否有其他任何东西可以覆盖/破坏它。

我有没有提到我非常讨厌更新面板?因为我讨厌充满激情的更新面板。

【问题讨论】:

  • 我目前正在努力解决似乎与您完全相同的问题和场景(即下拉列表的 onselectionchanged 未在更新面板内的用户控件中触发,但自动回发正在触发)。我一直在这里查看,希望有人提供一些有用的信息。如果我自己找到了有用的东西,我一定会发布它。
  • 我找到了问题的答案。见下文 (stackoverflow.com/questions/1829062/…)

标签: asp.net events updatepanel


【解决方案1】:

一个价格有两个答案:

  1. 您是否在您的Page_Load 中调用DataBind()?如果您在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>
    

【讨论】:

  • 非常感谢您的快速回复。下拉列表位于更新面板内的控件内。我仔细检查了页面加载或页面预加载中没有发生数据绑定。一切都在 !IsPostBack 中,数据绑定功能实际上发生在表单其他地方的按钮按下时。
  • dropdownGroup_changed 是在您的用户控件中定义的,还是在您的页面上定义的?
【解决方案2】:

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

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

【讨论】:

  • 我真的希望就是这样-不幸的是,底层价值都是不同的,所以它似乎不是罪魁祸首。虽然绑定的值都不同,但在回发期间值总是恢复为默认值。我还测试了一个文本框以防万一,它似乎有同样的问题。再次感谢您-我很感激我现在能得到的所有想法。
  • @apocalype9- 很抱歉听到这也没有帮助。
【解决方案3】:

你试过UpdatePanel.Update();在你的数据绑定之后。​​

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2011-08-19
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多