3

私は問題があります。コードビハインドからボタンにイベントハンドラーを追加している間、イベントは決して発生しません。しかし、ボタンタグを作成するときに追加すると、完全に機能し、コードビハインドからボタンを作成してテーブルに追加します。

<form id="form1" runat="server">
    <div>                       
        <asp:Button ID="Button1" runat="server" Text="show table" OnClick="Button1_OnClick" />
        <table border="1">
            <thead>
                <tr>
                </tr>
            </thead>
            <tbody id="tbody" runat="server">

            </tbody>
        </table>
    </div>
</form>


protected void Button1_OnClick(object sender, EventArgs e)
{
  var row = new TableRow(); 
  var btnDownload = new Button { ID = "ID", Text = "Click Here" };
  btnDownload.Click += ClickEvent;
  var cell = new TableCell();
  cell.Controls.Add(btnDownload);
  row.Controls.Add(cell);
  tbody.Controls.Add(row);
}
protected void ClickEvent(object sender, EventArgs e)
{
  Debug.WriteLine(((Button)sender).Text);
}
4

2 に答える 2

8

これを答えとして受け入れないでください。chappoo があなたの質問に答えました。

イベントは 1 回発生するため、コントロールは 1 回だけ存在し、次のときに消えPostBackます。PostBackイベントでコントロールを作成/削除しないでください。ページの実行中に動的サーバー コントロールを作成する必要がありInitます。

ASP.NET および ASP.NET MVC の「ライフ サイクル」を理解するためのリンクを次に示します。

ASP.NET

コントロール イベント ( ) およびポスト バック イベント ( ) をLoad発生させるには、ページの実行中にコントロールが存在する必要があることがわかります。たとえば、ページの子コントロール (およびコントロールのサブコントロール) は、ページの後で作成 ( )、データ バインド ( の後)、およびレンダリング ( ) されます。一部の開発者は、ページ内でを呼び出して、子コントロールをプリロードすることがあります。RaiseChangedEventsRaisePostBackEventCreateChildControlsOnPreRenderRenderControlLoadEnsureChildControlsLoad

http://msdn.microsoft.com/en-us/library/ms178472.aspx ASP.NET ページのライフサイクル

ASP.NET MVC

「ライフサイクル」は純粋にリクエスト処理用です。アクション (コントローラー) はレンダリング (ビュー) に依存しません。

ASP.Net MVC - リクエストのライフサイクル

http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/entrypage/be-ahead-of-the-game-poster1 ASP.NET MVC の「ライフサイクル」

于 2013-08-13T19:07:25.793 に答える
4

この質問に対する答えは、ASP.NET ページのライフサイクルを理解することにあります。ASP.NET は、ポストバック時にページのサーバー インスタンスを再構築します。サーバーが処理を完了し、応答がクライアントに返されると、サーバー インスタンスは永久に破棄され、ブラウザーに含まれるデータ (ビュー データ/Cookie など) と残りのサーバー データ (セッション/キャッシュ)。

Button1_OnClick イベント ハンドラーで動的ボタンのクリック イベントを接続しています。ASP.NET が次のポストバックでページを再構築しようとすると、(Button1 がクリックされなかったため) このイベント ハンドラーは実行されないため、イベント ハンドラーは接続されず、実行されない理由が説明されます。コントロール イベント ハンドラーをキャプチャするには、Page_Load ハンドラー内またはその前にイベント ハンドラーを接続する必要があります。

于 2013-08-08T08:05:59.347 に答える