【问题标题】:C# .NET DropDownList OnSelectedIndexChanged not firingC# .NET DropDownList OnSelectedIndexChanged 未触发
【发布时间】:2014-06-09 15:54:09
【问题描述】:

目前我在 asp:repeater 中有一个下拉列表。下拉列表有两个不同的事件。

DataBinding 和 SelectedIndexChanged。但是 SelectedIndexChanged 无论如何都不会触发。

这是我的 ASP 代码:

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Repeater runat="server" ID="_repArticles">
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <img width="130" height="100" src='<%# Eval("ImageFilePath") %>' /> 
                                </td>
                                <td>
                                    <%# Eval("Price") %>
                                </td>
                                <td>
                                    <asp:DropDownList AutoPostBack="true" runat="server" ID="_ddlQuantity" OnDataBinding="_ddlQuantity_DataBinding" OnSelectedIndexChanged="_ddlQuantity_SelectedIndexChanged"></asp:DropDownList>
                                </td>
                                <td>
                                    <%# Eval("TotalPrice") %>
                                </td>
                                <td>
                                    <asp:LinkButton runat="server" ID="_btnRemove" OnClick="_btnRemove_Click" CssClass="close" ToolTip='<%$ Resources: Resource, Remove %>' CommandArgument='<%# Eval("ProductId") %>' ForeColor="Transparent" BackColor="Transparent"></asp:LinkButton>
                                </td>
                            </tr>
                        </ItemTemplate>
                    </asp:Repeater>
                </ContentTemplate>
            </asp:UpdatePanel>

这是我的 C# 代码:

protected void _ddlQuantity_DataBinding(object sender, EventArgs e)
    {
        var ddl = sender as DropDownList;

        for (int i = 1; i < Convert.ToInt32(Eval("Stock")); i++)
            ddl.Items.Add(new ListItem(i.ToString(), i.ToString()));

        ddl.SelectedValue = Eval("Quantity").ToString();
    }

    protected void _ddlQuantity_SelectedIndexChanged(object sender, EventArgs e)
    {
        var ddl = sender as DropDownList;

        this.MasterPage.UpdateCartItem(Convert.ToInt32(Eval("ProductId")), Convert.ToInt32(ddl.SelectedValue));

        ddl.SelectedValue = Eval("Quantity").ToString();
    }

我开始认为你不能同时使用这两个事件,有谁知道我做错了什么?

【问题讨论】:

  • 你试过放断点吗?
  • 是的,事件只是不会触发,数据绑定不会触发 selectedindexchanged 不会。项目也处于调试模式。
  • 在 UpdatePanel 上更改 UpdateMode="Always" 有帮助吗?
  • 尝试使用下拉列表的 ID 和事件设置异步回发触发器
  • 确保您在过去时没有重新绑定 DDL。这将重置 SelectedIndexChanged 事件。

标签: c# .net events


【解决方案1】:

你可以试试改

UpdateMode="Always" 

来自

UpdateMode="Conditional"

【讨论】:

  • 在问题下方的 cmets 中被建议,不幸的是没有工作。
【解决方案2】:

嗯,我找到了解决方案,这是一个面对面的时刻。我在页面加载时重新绑定了转发器,忘记在它周围设置“if (!IsPostBack)”。

【讨论】:

    【解决方案3】:

    将触发器放在UpdatePanel中,然后尝试

    <asp:UpdatePanel runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Repeater runat="server" ID="_repArticles">
                        <ItemTemplate>
                            <tr>
                                <td>
                                    <img width="130" height="100" src='<%# Eval("ImageFilePath") %>' /> 
                                </td>
                                <td>
                                    <%# Eval("Price") %>
                                </td>
                                <td>
                                    <asp:DropDownList AutoPostBack="true" runat="server" ID="_ddlQuantity" OnDataBinding="_ddlQuantity_DataBinding" OnSelectedIndexChanged="_ddlQuantity_SelectedIndexChanged"></asp:DropDownList>
                                </td>
                                <td>
                                    <%# Eval("TotalPrice") %>
                                </td>
                                <td>
                                    <asp:LinkButton runat="server" ID="_btnRemove" OnClick="_btnRemove_Click" CssClass="close" ToolTip='<%$ Resources: Resource, Remove %>' CommandArgument='<%# Eval("ProductId") %>' ForeColor="Transparent" BackColor="Transparent"></asp:LinkButton>
                                </td>
                            </tr>
                        </ItemTemplate>
                    </asp:Repeater>
                </ContentTemplate>
    <Triggers>
                <asp:PostBackTrigger ControlID="_ddlQuantity" />
            </Triggers>
            </asp:UpdatePanel>
    

    【讨论】:

      猜你喜欢
      • 2016-05-24
      • 2014-02-20
      • 2013-09-13
      • 2011-08-17
      • 2016-09-05
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多