質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

12169閲覧

動的に配置したASP:LinkButtonのクリックイベントを発生させる方法

culych

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2020/06/04 14:53

編集2020/06/05 00:36

期待する動き

動的に生成したボタンのクリックイベントを発生させたい

現状

1.動的にボタンを生成することは可能
2.動的に生成したボタンをクリックすると、postbackが発生し、生成したボタンが消える

該当のソースコード

HTML

1<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="Event.aspx.cs" Inherits="EventHandlerTest.Event" %> 2 3<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 4</asp:Content> 5<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 6 <div id="divEvent" runat="server"> 7 <asp:Label ID="lblTest" runat="server" Text="テスト"></asp:Label> 8 <asp:PlaceHolder ID="PlaceHolder" runat="server"></asp:PlaceHolder> 9 <asp:LinkButton ID="LinkButtonTEST" runat="server" Text="ボタン" OnClick="LinkButtonTEST_Click"></asp:LinkButton> 10 </div> 11</asp:Content> 12

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.UI; 6using System.Web.UI.WebControls; 7 8namespace EventHandlerTest 9{ 10 public partial class Event : System.Web.UI.Page 11 { 12 private LinkButton btnEvent; 13 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 17 } 18 19 private void getEvent() 20 { 21 btnEvent = new LinkButton(); 22 btnEvent.ID = "Event"; 23 btnEvent.Text = "削除"; 24 btnEvent.Click += new EventHandler(btnEvent_Click); 25 divEvent.Controls.Add(btnEvent); 26 } 27 28 protected void btnEvent_Click(object sender, EventArgs e) 29 { 30 lblTest.Text = "テスト成功"; 31 } 32 33 protected void LinkButtonTEST_Click(object sender, EventArgs e) 34 { 35 getEvent(); 36 } 37 } 38}

補足情報(FW/ツールのバージョンなど)

ASP.net
C#
VisualStudio2019
Windows10
.NET 4.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/04 19:47 編集

ASP ではなくて ASP.NET のタグをつけて下さい。 それから、期待する動きは何で、実際はどうなるかを書いてください。(ボタンは動的に生成できるものの、生成したボタンのクリックでイベントは発生しない・・・ということであろうと想像してますが)
culych

2020/06/05 00:37

コメントありがとうございます。 タグを変更し、期待する動きと現状どうなっているかを追記しました。 ご確認お願いします。
guest

回答1

0

ベストアンサー

1.動的にボタンを生成することは可能
2.動的に生成したボタンをクリックすると、postbackが発生し、生成したボタンが消える

2 のポストバックの際は 1 で[削除]LinkButton を動的に生成した LinkButtonTEST_Click ハンドラには制御は飛んでこないので、[削除]LinkButton は生成されませんし、当然その Click イベントも発生しません。

前のスレッド https://teratail.com/questions/255832 の話を覚えてますか? 動的に生成したコントロールは、ポストバックの際も毎回動的に生成する必要があります。

といって、たぶん、今回のケースでは「ポストバックの際も毎回動的に生成」ということはできないと思います。であれば、解決策として提案できるのは[削除]LinkButton は静的に配置して初期画面では非表示(Visible を false に設定)にしておき、LinkButtonTEST_Click ハンドラで表示(Visible を true に設定)することです。

それでは期待したことができない場合は、その案のどこがどう問題なのか、できれば何をしたいのか全体のシナリオとともに、書いてください。

投稿2020/06/05 00:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

culych

2020/06/05 09:20

返信遅れました。 やはり、ボタンは静的に配置してvisibleをいじるしかないですよね。 前回に引き続きご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問