- PR -

[ASP.net]DropDownListの値を取得して確認メッセージを出力したい

投稿者投稿内容
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-17 09:42
スペースを使ったらうまく表示されなかったのでもう一度失礼します。

みなさんありがとうございます。
なんとかやりたいことができそうです。

aspx上では↓のようにコーディングしているのですが、
<asp:DropDownList ID="DropDownListFromY" runat="server"></asp:DropDownList>

出力されたHTMLでは↓のように出力されています。
<select name="_ctl0:ContentPlaceHolder1:DropDownListFromY" id="_ctl0_ContentPlaceHolder1_DropDownListFromY">
</select>

やはりこれが原因でした。

↓のJavaScriptで値も無事取得する事ができました。
document.all("_ctl0_ContentPlaceHolder1_DropDownListFromY").value;


MasterPageを使用するとIDが変わってしまうんですね。
↓MasterPageのコンテンツ部
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>

_ctl0_ContentPlaceHolder1_DropDownListFromY

_ctl0・・・・・・・・・・・・・・・・・・・・???
_ContentPlaceHolder1・・・・・MasterPageのコンテンツ部のID
_DropDownListFromY・・・・・・・aspx上のコントロールのID

最初の"_ctl0"の意味は分かりませんが、MasterPage使用すると付与される決まり(?)なんですかね・・・


みなさんのおかげでこの方法以外にもいろいろな実現方法があり勉強になりました。
ありがとうございます。

どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-11-17 14:52
> 最初の"_ctl0"の意味は分かりませんが、MasterPage使用すると付与される決まり(?)なんですかね・・・

決まりだと思います。
そういえばどこかでMasterPageというのはユーザコントロールの特殊なもの、という
記述を見たことがあります。
ページ内のコントロールツリーの最初(0番目)のコントロールとしてMasterPageが
登録されるためにつくのかなぁ。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-11-17 19:30
多分マスタページ内に直接配置したコントロールと同じIDを、
コンテンツプレースホルダ内で使用されたときにかぶらないようにするためではないでしょうか。

なので、aspx内にスクリプトを書くとき、
document.getElementById('DropDownListFromY')と書くのではなく、
document.getElementById('<%=DropDownListFromY.ClientID%>')と書く必要があります。

ただ、別のファイルにスクリプトを記述する場合は使えないので、
そういうときは一度動かして実際のIDを調べてそれを書くしかないのかな?
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-20 09:38
>ページ内のコントロールツリーの最初(0番目)のコントロールとしてMasterPageが
登録されるためにつくのかなぁ。
MasterPage内に「ContentPlaceHolder」を2つ作ってみました。
(それぞれに「DropDownListFromY」と「DropDownListToY」を作成)
_ctl0_ContentPlaceHolder1_・・・・
_ctl1_ContentPlaceHolder2_・・・・
上記のように「_ctl1」になるのかと思ったら、下記のように先頭は「_ctl0」でした。
_ctl0_ContentPlaceHolder1_DropDownListFromY
_ctl0_ContentPlaceHolder2_DropDownListToY
"_ctl0"固定のようです。

>document.getElementById('<%=DropDownListFromY.ClientID%>')と書く必要があります。
あ、こちらのほうがスマートですね。ありがとうございます。
でも、別ファイルにてスクリプトを記述するので、実際に出力されたHTMLのIDを書くことになりそうです。

ありがとうございます。

ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-11-20 10:30
こんにちは。

引用:

なんとかさんの書き込み (2006-11-20 09:38) より:

でも、別ファイルにてスクリプトを記述するので、実際に出力されたHTMLのIDを書くことになりそうです。


スクリプトは別ファイル…ということだと、結局実際に出力された ID を調べる方法になり
ますが、その場合に「意図しない理由」で ID が変更されてしまうことも考慮しないとい
けないですね(もちろん、そこまで考えてのことだと思いますが)。

個人的には、ID 『だけ』は aspx ファイルの方で渡してやる方法にしちゃうかもしれませ
ん。

コード:

<script type="text/javascript">
<!--
function hoge()
{
    var dropDownId = '<%=DropDownListFromY.ClientID%>';
    foo(dropDownId);
}
// -->
</script>


みたいな感じで。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-20 10:55
>スクリプトは別ファイル…ということだと、結局実際に出力された ID を調べる方法になり
ますが、その場合に「意図しない理由」で ID が変更されてしまうことも考慮しないとい
けないですね(もちろん、そこまで考えてのことだと思いますが)。

ありがとうございます。たしかに「「意図しない理由」で ID が変更されてしまうことも」が怖かったので、
今はぽぴ王子さんのおっしゃるようなやり方で実装しようとしています。
(IDではなく値を渡している(チェックルーチンだけ別ファイルという形))


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