- PR -

動的に生成したASPコントロールにJavaScriptを関連づける方法

投稿者投稿内容
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-04-04 18:30
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<TR>
<td align="center">
<asp:button OnCommand="Button1_Click" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "COMMAND") %>' CssClass=button style="WIDTH: 20px; HEIGHT: 20px" runat="server" >
</asp:button></td>
</TR>
</ItemTemplate>
</asp:Repeater>

**以上、動的にボタンを生成している部分を抜粋**

このような感じで、ASPボタンコントロールを動的に生成しているのですが、
このボタンコントロールにJavaScriptを関連づける方法をご存知の方
お知恵をお貸しください。

Button1.Attributes.Add("onclick","return confirm('テスト');")
のような感じで、関連づけようとすると当然ですが、未定義のオブジェクト
で有る為、コンパイルが通りません。


動的にASPボタンコントロールをを生成してJavaScriptを関連づけられれば
代替案でも構いませんのでよろしくお願いします。

**追記**
.Net Framework 2.0の場合onclientclickという属性が存在することが
わかりましたが、残念ながら現在の環境は1.1です。この環境で実現する方法
についてお教えください。

[ メッセージ編集済み 編集者: TAKEZO 編集日時 2006-04-04 18:44 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-04 18:52
Repeater には、各行を生成するときに発生するイベントが存在するので、そのイベント処理中に FindControl でそのボタンを取得してあげればいけるでしょう。
_________________
囚人のジレンマな日々
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-04-04 19:51
すみません、初歩的なところを理解できていない可能性があるのですが、
FindControlで取得できそうなのは理解できましたので生成するボタンにあらかじめ
一意になるようなIDを動的に割り振ることを考えました。

ところが、以下のような記述を行うと『'XXXX' は有効な識別子ではありません。』
というエラーが出てしまいます。動的にコントロールのIDを指定することは可能なので
しょうか?よろしくお願いします。

<asp:button id='<%# 【動的にIDを生成するメソッド】%>' OnCommand="Button1_Click" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "COMMAND") %>' CssClass=button style="WIDTH: 20px; HEIGHT: 20px" runat="server" >
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-04 19:56
ID を動的に振る必要はありません。

_________________
囚人のジレンマな日々
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-04-04 20:08
大変恐縮です。FindControlメソッドでは引数として対象オブジェクトのIDを
要求すると思うのですが、それでIDを動的に生成してFindControlの引数にも
同じものを指定しようと考えておりました。IDを振らずにオブジェクトの参照
を取得する方法をもう少し詳しく教えて頂けると大変助かります。

よろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-04 20:17
ID は「動的」ではなく「固定」で "ButtonId1" 等で構いません。
次に、
Button b = ( Button )Repeater1.FindControl( "Button1" );
でボタンを取得してあげてください。

最初の投稿でも言いましたが、これらは「行が生成されるイベント」で行ってください。

#Repeater でもいけたよね…。間違ってたらすみません。
_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-04-04 20:18 ]
TAKEZO
ベテラン
会議室デビュー日: 2003/12/25
投稿数: 59
投稿日時: 2006-04-04 20:46
ItemDataBoundイベントにお教え頂いたコードを記述したところ
動的にJavaScriptを関連づけすることが出来ました。
最後までおつきあい頂き本当にありがとうございました。
trapemiya
大ベテラン
会議室デビュー日: 2005/07/30
投稿数: 102
投稿日時: 2006-04-04 20:48
引用:

ID は「動的」ではなく「固定」で "ButtonId1" 等で構いません。



ClientIDでいいんじゃないでしょうか?

スキルアップ/キャリアアップ(JOB@IT)