[英]C# .NET DropDownList OnSelectedIndexChanged not firing
Currently I have a dropdownlist in a asp:repeater. 目前,我在asp:repeater中有一个下拉列表。 The dropdownlist gots two different events.
下拉列表有两个不同的事件。
DataBinding and SelectedIndexChanged. DataBinding和SelectedIndexChanged。 But the SelectedIndexChanged just won't trigger not matter what.
但是无论什么情况,SelectedIndexChanged都不会触发。
Here's my ASP code: 这是我的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>
And here's my C# code: 这是我的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();
}
I start to think that you can't use both of these events, does anyone know what I am doing wrong? 我开始认为您不能同时使用这两种事件,有人知道我在做什么错吗?
You can try changing 你可以尝试改变
UpdateMode="Always"
from 从
UpdateMode="Conditional"
Well I got the solution, and it's a facepalm moment. 好吧,我得到了解决方案,这是一个面对面的时刻。 I rebinded the repeater on the page load, forgot to set the "if (!IsPostBack)" around it.
我在页面加载时重新绑定了转发器,却忘记在其周围设置“ if(!IsPostBack)”。
Put Triggers in UpdatePanel and then try 将触发器放在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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.