- PR -

repeater内で作成されるUserIDの取得方法について

投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-18 15:23

お世話になっています。

また、わからないことが発生したのでご存知の方は
教えてください。
ASP.NET2002(C#)でプログラムを作っています。
repeaterコントロール内でつかっているCheckBoxを
すべてチェックオン/オフを切り替えるボタンを
作成しようとしています。

ただ、repeaterコントロール内でつかっているCheckBoxの
IDを正しく取得することができないで困っています。


ItemCreatedで
string a = ((CheckBox)e.Item.FindControl("wChkBox")).ClientID;
というようにClientIDを取得しているのですが、
この名前ではありませんでした。

どのようにしたらrepeaterコントロール内でつかっている
CheckBoxのIDを正しく取得することができるのでしょうか?

#まったく関係はないですが、
CheckBoxをすべてチェックするサンプルのJavaScriptは
下記のように作成しました。

コード:
<html>
<head>
<title>test</title>
<script language='javascript'>
<!--
var count;
function test(check){
	var objTest = document.all;

	if (objTest['hoge1'].checked==true){
	//alert(objTest['r1'].length);
		for (var i = 0;i<objTest['r1'].length;i++){
			objTest['r1'][i].checked = true;
		}
	}else{
		for (var i = 0;i<objTest['r1'].length;i++){
			objTest['r1'][i].checked = false;
		}
	}
}
-->
</script>
</head>
<body>
<form name="form1">
	<input type="checkbox"	id="r1"><br>
	<input type="checkbox"	id="r1"><br>
	<input type="checkbox"	id="r1"><br>
	<input type="checkbox"	id="r1"><br>
	<input type="checkbox"	id="r1"><br>
	<input type="checkbox"	id="hoge1" onclick="test()">←ここがポイント<br>
</form>
</body>
</html>



mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-18 16:44
msoです。


ASP.NET(C#)でのソースとASP.NETで生成されたソース(HTML)を
比較してみていたらRepeaterコントロールの中で作成される
idのルールがわかってきたのですが、まだわからないことがあるので
ご存知の方がいたら教えてください。

まず、Repeaterコントロールの中にあるコントロールが作成されるルール
なのですが、私のみた限りはこんな感じになります。

Repeaterコントロールの名前(ID)+"_"+automaticIdPrefix+行数+CheckBoxのコントロール名(ID)

そこでわからないことがあるのですが、
automaticIdPrefix
は今のところ固定で"_ctl"になっているのですが、
automaticIdPrefixをどうにかして取得できないのでしょうか?

---------
一部訂正

[ メッセージ編集済み 編集者: mso 編集日時 2004-03-18 17:57 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-03-18 19:09
引用:

msoさんの書き込み (2004-03-18 15:23) より:

string a = ((CheckBox)e.Item.FindControl("wChkBox")).ClientID;




UniqueIDじゃダメですか?
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-18 19:12
引用:

NAL-6295さんの書き込み (2004-03-18 19:09) より:
引用:

msoさんの書き込み (2004-03-18 15:23) より:

string a = ((CheckBox)e.Item.FindControl("wChkBox")).ClientID;




UniqueIDじゃダメですか?




私の取得方法が悪かったのかもしれませんが、
だめでした。
ClientID
ID
UniqueID
は試しましたが、どれも違っていました。
#取得方法のミスかなぁ・・・?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-03-18 19:15
ItemDataBoundかな
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-03-18 19:19
『すべてチェックオン/オフを切り替える』というのは、
オンのチェックボックスをオフに、オフのチェックボックスをオンにするということでよろしいでしょうか?

であれば、JavaScriptで
コード:
for (var i = 0;i<objTest['r1'].length;i++){
	objTest['r1'][i].checked = !(objTest['r1'][i].checked);
}

とすれば、実現できるかと。

ちなみに、上記の
コード:
if (objTest['hoge1'].checked==true){
//alert(objTest['r1'].length);
	for (var i = 0;i<objTest['r1'].length;i++){
		objTest['r1'][i].checked = true;
	}
}else{
	for (var i = 0;i<objTest['r1'].length;i++){
		objTest['r1'][i].checked = false;
	}
}

も、
コード:
for (var i = 0;i<objTest['r1'].length;i++){
	objTest['r1'][i].checked = objTest['hoge1'].checked;
}

↑こう書けます。


ところで、
Repeaterの中のControlだとClientIDに正しい値が入らないんですか?
いま手元に環境がないので試せないのですが、もしよかったら、
string a = ((CheckBox)e.Item.FindControl("wChkBox")).ClientID;で返ってくる値と、
実際にHTMLとして出力される値を教えていただけますか?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2004-03-18 19:21
取得しようとしていたイベントを見落としていました。
ItemCreatedだとダメなんですよね。
ItemDataBoundで取得できませんか?

ちなみに、HTML上では、
ClientID = ID="****"
UniqueID = Name="****"

と、なります。

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-03-18 19:25 ]

[ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-03-18 19:26 ]
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2004-03-18 19:47
同じく、見落としてました。
ItemCreatedだと、IDプロパティの値がそのまま返ってきてしまいますね。

# ↑で環境がないと書いてから、Web Matrixをインストールしてたことを思い出し確認してみました。

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