- PR -

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

投稿者投稿内容
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-15 11:26
お世話になります。


以下のDropDownListがあります。
・期間(From)(年) DropDownListFromY
・期間(From)(月) DropDownListFromM
・期間(From)(日) DropDownListFromD
・期間(To)(年) DropDownListToY
・期間(To)(月) DropDownListToM
・期間(To)(日) DropDownListToD
[実行]ボタン押下により以下の処理を実行したい
1.年月日の整合性(2006年02月31日とかになっていないか)
  NGの場合エラーメッセージ
2.期間の整合性チェック(From(年月日) < To(年月日)になっているか)
  NGの場合エラーメッセージ
3.上記2つがOKならば確認メッセージを出力("2006/01/01 〜 2006/02/01 でよろしいですか?")
4.「3.」で[OK]ボタン押下時に次のページへ遷移したい(Response.Redirect("NextPage.aspx"))

確認メッセージを出すだけならば
ButtonJikkou.Attributes("OnClick") = "return confirm('よろしいですか?')"
で実現できるのですが、選択されているDorpDownListの値を取得してメッセージを出力するという方法がわかりません。
JavaScriptで
DropDownListFromY.selectedIndex
等で値を取得して強引にやろうともしたのですがうまくいきませんでした。

どなたか御教授願います。
宜しくお願いします。
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-11-15 12:11
ブラウザによって違うかもしれないし大文字小文字あってるかわからないけど
DropDownListFromY.options[1].text
じゃないかね。表示されてる文字列を出すなら。

1と2は実装済み?(.NET2.0ならDateTime.TryParse使うかな〜)
1と2をサーバでやるんなら3もサーバで作っちゃったほうがいいでしょうね。

[追記]
ぁ、サーバコードから確認ダイアログ出すようにするにはRegisterStartupScriptを
使うことになると思います。

[ メッセージ編集済み 編集者: べる 編集日時 2006-11-15 12:24 ]
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2006-11-15 12:54
サーバサイドとクライアントサイドのどちらで何をやろうとしているのか判断しにくいですね。

JavaScript で判断するなら、ココなんかが役に立つかも。

値を取得するなら「value」、表示文字列を取得するならべるさんのおっしゃる通り「text」ですね。
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-15 13:41
御回答ありがとうございます。

「1.」〜「3.」はクライアントで処理を行おうと思います。

単純にHTMLを作成し、教えていただいた「options[1].text 」や「options[1].value」で
値を取得する事はできましたが、aspx上でうまく動かない状況です。

出力されたHTMLをみると以下のように「name」が変わっていたり、
<select name="_ctl0:ContentPlaceHolder1:DropDownListFromY" id="_ctl0_ContentPlaceHolder1_DropDownListFromY">

MasterPageを使っているのでそれが悪影響を与えているのか?
等いろいろと不明な要素が多くあるので、もう少し試行錯誤して状況を整理してまた質問させてもらおうと思います。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-11-15 14:00
> MasterPageを使っているのでそれが悪影響を与えているのか?

「悪影響」ですか。。。
ASP.NET側がサーバとブラウザ間でうまく整合性をとるための仕組みだと
思いますけど。

で、まずASP.NETを作ってそこから生成されるHTMLにあわせてクライアント側の
JavaScriptを作成するのがてっとりばやいと思います。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-11-16 08:24
引用:

以下のDropDownListがあります。
・期間(From)(年) DropDownListFromY
・期間(From)(月) DropDownListFromM
・期間(From)(日) DropDownListFromD
・期間(To)(年) DropDownListToY
・期間(To)(月) DropDownListToM
・期間(To)(日) DropDownListToD


私ならDropDownListの代わりにCalendarコントロールを利用しますけどね!

この場合、開始日、終了日の範囲のチェックも含めてすべて検証コントロール
で可能です。

ポップアップカレンダーから日付を選択させる
http://akiokasai.qsh.eu/Goto.aspx?id=atlas/060331-1

ドロップダウンカレンダーから日付を選択させる
http://akiokasai.qsh.eu/Goto.aspx?id=060621-3



_________________
ASP.NET+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2006-11-16 09:07 ]
THREE-ONE
常連さん
会議室デビュー日: 2006/08/17
投稿数: 36
投稿日時: 2006-11-16 23:28
こんばんは、THREE-ONEです。

コード:
ddlList = document.getElementsByTagName("select");
year = ddlList[0].options[ddlList[0].selectedIndex].text;


こんな形なら、id・name 関係なく取れるのではないでしょうか?
なんとか
会議室デビュー日: 2006/09/27
投稿数: 17
投稿日時: 2006-11-17 09:40
みなさんありがとうございます。
なんとかやりたいことができそうです。

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>

↓aspx上のコントロールのID
_________________
_ctl0_ContentPlaceHolder1_DropDownListFromY
~~~~~~~~~~~~~~~~~~~
↑MasterPageのコンテンツ部のID

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


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

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