これらの別の質問をここに置くのは嫌ですが、このタイプの他の 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;
}
}