ASP.NET C#,在转发器中动态下拉导致完全回发

Rob*_*nch 1 c# asp.net repeater autopostback drop-down-menu

我在UpdatePanel中有一个包含Repeater的页面,其中包含服务器控件元素,而所有其他控件的行为正常,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>
Run Code Online (Sandbox Code Playgroud)

这是我的代码看起来很像,DropDownList控件实际上在UserControl中,但理论是相同的.

如果我将事件应用于SomeWorkingControl然后有一个Ajax回发,一切都很好.

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

有没有人以前经历过这个并且知道解决方法呢?

小智 9

尝试更改此行:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true">
Run Code Online (Sandbox Code Playgroud)

对于:

<asp:DropDownList ID="ddl" runat="server" OnSelectedIndexChanged="ddl_SelectedIndexChanged" AutoPostBack="true" ClientIDMode="AutoID">
Run Code Online (Sandbox Code Playgroud)

最近我遇到了同样的问题,我发现ClientIDMode可以解决它.

请看这里:asp.net ClientIDMode更改