2

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

4 に答える 4

2

わかりました。それは実際には私の側のかなりばかげた間違いでした。

私の DropDownList は、 に含まれているのではなく、ページにぶら下がっていました<form>。SelectedIndexChanged イベントを無効にすることを認識していませんでした。したがって、.aspx ファイルのコードを次のように変更しました。

<form ID="ProductForm" runat="server">
  <asp:DropDownList .... />
</form>
于 2013-10-15T23:25:47.550 に答える
0

EventHandler が正しく接続されていることを確認してください。

Visual Studio でデザイナー モードに切り替え、DropDownList をダブルクリックして、CodeBehind が実際の DrpProduct_SelectedIndexChanged メソッドに開かれていることを確認してください。

これは常に、コードをテストし、すべてが接続されていることを確認するための良い方法です。

このようにプログラムで EventHandler を接続することもできます...

DrpProduct.Click += new eventHandler(DrpProduct_SelectedIndexChanged);
于 2013-10-15T23:11:40.327 に答える