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

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

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

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

ASP.NET

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

Q&A

解決済

1回答

6874閲覧

aspxのタグに動的な属性値を渡したい

beginnerOfLife

総合スコア17

C#

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

ASP.NET

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

0グッド

0クリップ

投稿2019/03/11 14:52

前提・実現したいこと

for文の中にあるaspxのイメージボタンのタグに動的な属性値(i)を<%= i %>で渡してボタンクリック時に受け取りたい

環境(変更不可)
windows10,asp.net framework3.0,ビューエンジン:aspx,visual studio 2017

試したこと

asp:ImageButtonのCommandArgument属性に渡した
<button>のvalue属性に渡した

該当のソースコード

asp:ImgeButtonを使用

aspx

1<% for (int i = 0; i < 10; i++){ %> 2<asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/googlelogo_color_92x30dp.png" OnCommand="ImageButton_Click" CommandArgument="<%=i %>" /> 3<% } %> 4

C#

1protected void ImageButton_Click(object sender, CommandEventArgs e) 2 { 3 string i = e.CommandArgument.ToString(); 4 }

<Button><image></Button>を使用

aspx

1<% for (int i = 0; i < 10; i++){ %> 2<button runat="server" onserverclick="Button_Click" name="i" value="<%= i %>"> 3 <asp:Image ID="Image1" runat="server" ImageUrl="~/googlelogo_color_92x30dp.png" /> 4</button> 5%>

C#

1protected void Button_Click(object sender, EventArgs e) 2{ 3 string i = Request["i"]; 4}

結果

"<%= i %>"という文字列をそのまま受け取ってしまい、ボタンが押された時の数値iを受け取れなかった。
なぜこのような結果になるのか、数値iを受け取るにはどうするべきか、ご回答宜しくお願い致します。ここまでお読みくださってありがとうございました。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/11 22:13 編集

XY問題(Xがやりたいことだが、質問者さんはYがその解決策だと思って、Yの質問をしたが、YはXの解決策になってない)のように思えます。Xの方を書いてください。
guest

回答1

0

ベストアンサー

XY 問題のように思えますので、Y(質問に書いてあること)に直接答えるのではなく、X(やりたいこと)を想像してそれを実現する方法を書きます。

やりたいことは「Page に ImageButton を複数(数は任意?)動的に配置し、ユーザーがクリックしてポストバックされた時、どの ImageButton がクリックされたかを CommandArgument プロパティで判定する」と理解して回答します。理解が違っていたらどう違うのか連絡ください。

ASP.NET Web Forms アプリで動的にコントロールを Page に配置するのは .aspx ファイルではなく、.aspx.cs(コードビハインド)側で行います。

.aspx にはコントロールを動的に配置する位置に PlaceHolder を置き、.aspx.cs の Page_Init ハンドラで ImageButton を生成・初期化し、PlaceHolder に追加してやります。.aspx.cs は以下のようになります。

using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class About : Page { protected void Page_Init(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { ImageButton btn = new ImageButton { ID = "imagebutton" + i.ToString(), ImageUrl = "~/images/sample.jpg", CommandArgument = i.ToString() }; btn.Command += ImageButton_Click; PlaceHolder1.Controls.Add(btn); } } protected void Page_Load(object sender, EventArgs e) { } protected void ImageButton_Click(object sender, CommandEventArgs e) { string i = e.CommandArgument.ToString(); } } }

投稿2019/03/12 03:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問