0

プレースホルダーにボタンを追加しようとしています。各ボタンには、同じメソッドのイベントハンドラーがあります。

        if (!this.IsPostBack)
        {

                foreach (Entry ent in results)
                {
                    HtmlButton btn = new HtmlButton();
                    btn.ServerClick += new EventHandler(resultSelected);
                    btn.InnerText = ent.name;
                    btn.ID = ent.ID.ToString();
                    PlaceHolder1.Controls.Add(btn);
                }
       }

1)ボタンがページに追加されますが、クリックするとメソッド(resultSelected)が呼び出されず、Page_Loadのみが再度呼び出されます。また、Page_Loadに入ると、PlaceHolderは空になります(ボタンはページに表示されません)。私がやろうとしたことをどのように達成しますか?

2)この方法で作成されたボタンにCSSクラスを割り当てるにはどうすればよいですか?

4

1 に答える 1

2

ASP.NET を初めて使用する場合、サーバー側に動的コントロールを追加するのは非常に一般的な問題です。

  1. まず、これらのコントロールを追加し、すべてのページ要求でイベント ハンドラーを割り当てる必要があります。すべてのポストバックでも同様です。イベントを適切に処理して ViewState を復元するには、それらに同じ ID を割り当て、同じ階層を適用する必要があります。
  2. コントロールは、Page Load イベントの前に追加する必要があります。最も便利なのは、メソッドの前にCreateChildControls()起動されるオーバーライドされたメソッドに追加することです。PostbackOnLoad
  3. イベントは OnLoaded メソッドの後に発生するため、たとえばOnPreRender/Renderメソッドでコントロールを作成する場合、イベントは発生しません。

これは、私の説明では一部の詳細を省略した、最も単純なアプローチです。詳細については、ASP.NET アプリケーション ライフ サイクルを参照してください。

質問の2番目の部分については、 Style Propertyで明示的なスタイル設定を使用するか、Attributes Propertyを使用してクラス属性を追加することもできるはずですが、今は推測しています.HtmlButtonにはCssClassプロパティがないと思います. .

于 2012-10-31T20:02:08.353 に答える