【问题标题】:ASP.NET C#, dynamic drop down in repeater causing full post backASP.NET C#,转发器中的动态下拉导致完整回发
【发布时间】:2013-08-30 15:35:08
【问题描述】:

我有一个包含 Repeater 的页面,其中包含服务器控件元素,在 UpdatePanel 中,而所有其他控件都正常运行,但 Drop Down 控件每次都会导致完整的回发。

<asp:Repeater ID="rpt" runat="server">
    <ItemTemplate>
        <asp:SomeWorkingControl ID="swc" runat="server" />
        <asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true">
            <asp:ListItem Text="0" Value="0" />
            <asp:ListItem Text="1" Value="1" />
        </asp:DropDownList>
    </ItemTemplate>
</asp:Repeater>

这大概是我的代码的样子,DropDownList 控件实际上是在一个 UserControl 中,但原理是一样的。

如果我将一个事件应用到 SomeWorkingControl,那么就会有一个 Ajax 回发,一切都很好。

但是,与 DropDownList 关联的事件会导致完整的回发!我知道通常你会为 DropDown 设置一个异步触发器,但由于它是在转发器中创建的(因此我不知道会有多少)所以我真的不知道它是如何工作的。

有没有人以前经历过这种情况并且可能知道解决方法?

【问题讨论】:

  • 您的 UpdatePanel 中有触发器吗?你能用更新面板更新完整的 aspx 代码吗
  • 不,目前 UpdatePanel 中没有触发器。这通常是我会做的,但由于 DropDownList 在中继器内,我不确定将触发器指向什么。我不能真正发布完整的 ASPX,它是一个大页面,其中包含 ASPX 中的 UpdatePanel 和用户控件中的违规代码,在转发器中,然后在另一个用户控件中。 UpdatePanel 是基本的,看起来像这样。 ...ascx -> 中继器 -> ascx
  • 您可能希望简化布局——Repeater 已经设计为对每一行重复标记。仅当您计划在其他地方使用该标记时,将该标记封装在 UserControl 中才有帮助。
  • 这正是它是用户控件的原因。这是一个大型项目,所讨论的 DDL 的目的是用于列表分页,并且在所有地方都使用。

标签: c# asp.net drop-down-menu repeater autopostback


【解决方案1】:

尝试改变这一行:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true">

为:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true" ClientIDMode="AutoID">

最近遇到同样的问题,发现ClientIDMode可以解决。

请看这里:asp.net ClientIDMode Changes

【讨论】:

  • 太棒了!这已经完成了更新面板中的技巧和回发,它不会使用 DropDownList 中的 ClientIDMode="AutoID" 更新整个页面。非常感谢!
  • 很高兴能帮上忙。
  • 这是一个旧答案,但刚刚保存了我的培根,看起来中继器不能很好地处理 DDL 的 ID!感谢分享:)
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多