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

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

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

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

Q&A

解決済

1回答

5753閲覧

(ASP.NET)コンテンツページの<asp:Content>タグ内にhtml,コントロールを動的に作成したい。

CCraida

総合スコア6

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

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

0グッド

0クリップ

投稿2021/12/14 14:04

編集2021/12/14 14:17

ASP.NETでWebアプリケーションの作成をしています。
そこでマスターページ(Site.Master)とコンテンツページ(WebForm1.aspx)を使用してレイアウトの作成をしています。
コンテンツページでasp:Contentタグ内にhtmlやコントロールをプログラムで動的に作成したいのですが、調べたところ直接asp:Contentタグ内に記述するサンプルばかりでやり方がわかりません。

知っている方がいらっしゃったら教えていただきたいです。
イメージとしては、下記の三枚目のasp:Contentタグ内をプログラムで動的に作成したいです。

ASP

1 2Site.Master 3//マスターページ 4<body> 5 <form id="form1" runat="server"> 6 <div> 7 <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 8 </asp:ContentPlaceHolder> 9 </div> 10 </form> 11</body>

ASP

1WebForm1.aspx 2//コンテンツページ 3<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="fortest.WebForm1" %> 4<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 5</asp:Content> 6

下記の内容を動的に作成したい。

ASP

1WebForm1.aspx 2//コンテンツページ  3<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="fortest.WebForm1" %> 4<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 5 <h1>この行や下のボタンコントロールを動的に作成したい</h1> 6 <asp:Button ID="Button1" runat="server" Text="Button" /> 7</asp:Content> 8

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/14 23:13

先のスレッド https://teratail.com/questions/370834 が回答をもらっておきながら放置状態だけど、ここもまた同じことになるのかな?
guest

回答1

0

ベストアンサー

質問者さんは自分で立てたスレッドを放置・放棄して去ってしまったようですが、検索などでここを訪れた人などのために回答を書いておきます。

ASP.NET Web Forms アプリのページに動的にコントロールを生成して追加する基本です。

(1) 動的にコントロールを追加したいページ上の場所に PlaceHolder をツールボックスからドラッグ&ドロップする。

PlaceHolder クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.ui.webcontrols.placeholder?view=netframework-4.8

(2) コードビハインドのコード内で Page.Init イベントのハンドラで必要なコントロールを生成し PlaceHolder に追加する。

ポストバックで再描画するならポストバック時にも必ず発生するイベントのハンドラでコントロールの生成・追加を行う必要があります。例えば、Button クリックなどのイベントハンドラを使うと、その次のポストバックで消えてしまいます。

また、静的に配置したコントロールと同じ動きを期待するなら Page_Init を使います。Page_Load では遅すぎます( LoadViewState メソッド ⇒ LoadPostData メソッドのタイミングの問題)。

(3) サーバーコントロールではない静的な html 要素の配置には Literal コントロールを使います。

Literal クラス
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.ui.webcontrols.literal?view=netframework-4.8

(4) 質問に書いてあった h1 タグと Button コントロールの動的な追加は、上記 (1) ~ (3) の要領に従って以下のようにします。

protected void Page_Init(object sender, EventArgs e) { Literal h1Tag = new Literal(); h1Tag.Text = "<h1>この行や下のボタンコントロールを動的に作成したい</h1>"; PlaceHolder1.Controls.Add(h1Tag); Button btn = new Button(); btn.ID = "Button1"; btn.Text = "Button1"; PlaceHolder1.Controls.Add(btn); }

投稿2021/12/19 02:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問