1

でライブテーブルを開発していますWebForms

テーブルに新しい行を追加するときに、各 TableRow の各 TableCell にこのようなコントロールを追加しています。

// in some method, which creates the table

TableRow row = new TableRow();

// here goes other cells with text data

TableCell cellActions = new TableCell();
cellActions.ID = "offerActionsOfferId" + enumerator.Current.offerId;

// init button View More for cell
LinkButton buttonViewExpanded = new LinkButton();
buttonViewExpanded.ID = "buttonViewExpandedOfferId" + enumerator.Current.offerId;
buttonViewExpanded.CssClass = "table-actions-button ic-table-edit";
buttonViewExpanded.Click += new EventHandler(buttonViewExpanded_Click);
buttonViewExpanded.ToolTip = "some alt...";
cellActions.Controls.Add(buttonViewExpanded);
/* end of Action Buttons */

...

row.Cells.Add(cellActions);
this.tableMarket.Controls.Add(row);

しかし、その方法には失敗がありnew EventHandler(buttonViewExpanded_Click)ます。

テーブルは ASPX ページで適切にレンダリングされ、すべてのコントロールが表示されますが、その LinkBut​​ton をクリックしようとするとエラーが発生します。

ブレークポイントをマークし、デバッガーで ASP.NET プログラムの実行をキャッチして、プログラムの動作を分析しようとすると、ページが更新されるだけで、クリック イベント ハンドラーのブレークポイントは 1 つもキャッチされません。

なぜ発生するのですか?そして、それを機能させる方法は?

4

1 に答える 1

1

あなたのコードをテストできません。のような他のクラスと結びついていますInternalApi。しかし、ここに私が見つけたものがあります。

ページ initでSetTableBodyForSceneMarketをロードする方法を理解する必要があります。

基本的に、ポストバック時に動的に作成されたコントロールをリロードします。それ以外の場合、これらのコントロールは null になり、イベントを発生させることはできません。

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    if(IsPostBack)
    {
        SetTableBodyForSceneMarket();
    }
}

private void SetTableBodyForSceneMarket()
{
  ...
}
于 2013-05-20T16:10:51.890 に答える