我不想在这里再放一个,但是这种类型的其他 20 个问题已经用“set AutoPostBack="true"
”回答了,我已经完成了。我相信我的问题更多在于我在 DropDownList 中设置项目的方式,但我是 ASP.NET 的新手,所以我不确定正确的解决方案是什么。
这是我的控制:
<asp:DropDownList ID="DrpProduct" CssClass="input-xxlarge" runat="server" AutoPostBack="true" EnableViewState="true" OnSelectedIndexChanged="DrpProduct_SelectedIndexChanged" ViewStateMode="Enabled" />
这是我在页面的代码隐藏中设置它的地方:
protected void Page_Init(object sender, EventArgs e)
{
Repository = new ProductRepository();
Products = Repository.List();
if (Products.Any())
foreach (Product product in Products) {
DrpProduct.Items.Add(new ListItem(product.Name, product.Name));
}
}
最后是我的听众:
protected void DrpProduct_SelectedIndexChanged(object sender, EventArgs eArgs)
{
//code omitted. I have a breakpoint here that never gets hit anyways.
}
它们正确渲染和显示,但是当我使用下拉菜单时未命中 OnSelectedIndexChanged 事件。我已经读过,如果没有在页面生命周期的适当阶段以这种方式将项目添加到下拉列表中,可能会出现问题,但我已经在多个其他阶段尝试过,但没有效果。出于特定原因,我这样做(而不是数据绑定对象等),所以想让这段代码为我工作。
编辑:根据要求,这是我的 ProductRepository 代码:
public class ProductRepository
{
private IList<Product> Products { get; set; }
public ProductRepository()
{
Products = new List<Product> {
new Product("Grand Theft Auto V", "A video game that lets you kill hookers.", 59.99m),
new Product("Fallout 4", "lol u wish", 99.99m),
new Product("XCOM: Enemy Unknown", "Probably one of the better games you'll ever play.", 39.99m),
new Product("The Bureau: XCOM Declassified", "The game NO ONE asked for. Or wanted.", 59.99m),
new Product("Rome 2: Total War", "There'd better be phalanxes.", 59.99m)
};
}
public IList<Product> List()
{
return Products;
}
}