- PR -

showModalDialogでの日付入力について

投稿者投稿内容
うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2003-02-24 13:57
うーん、僕もモーダルダイアログ好きなんですが(笑)

>IEならScriptからshowModalDialogをよびだせますよ。
おお、知らなかった(笑)。これはいわゆるVBScriptの命令の一つですねー。
まるっきりWindow.Openのようだ(笑)。
しかし、残念ながらこの構文を使ってもいわゆるモーダルダイアログには
ならず、親元も操作できてしまう・・・。

>要件としましては子画面が開いている最中に親画面
>をさわれないようにしたいのです。

少し、発想の転換というか逃げですが(笑)、要は子画面が開いている最中に
親画面のコントロールにロックがかかれば良いということではないでしょうか?。
親画面のウィンドウそのものを表示されるのは逃げようが無いかもしれませんが、
コントロールを無効にすることはできるかと思います。

1.子画面を呼び出すためのボタンが押された。
2.親画面のコードで、親画面の各コントロールを無効にする。
3.子画面を表示するためのWindow.OpenないしはshowModalDialogを出力する。
4.子画面の入力が終わり、表示を終了するボタンが押された
5.親画面の各コントロールを有効にする
6.子画面を閉じる

うわ、これをコーディングするのは面倒くさいな!(笑)
JAVAScript使いまくりですがな(苦笑)もう一段階ひねりましょうか・・・・

1.子画面を呼び出すためのボタンが押された。
2.同じページ内に用意していた、「子画面用のテーブル」を非表示から表示に変える。
3.同じページ内の「親画面用のテーブル」を非表示にする。
4.子画面の入力が終わり、表示を終了するボタンが押された
5.子画面用テーブルを非表示にし、入力を反映。
6.親画面用テーブルを表示

いかがでしょうか?(笑)これならひとつのファイルで済み、しかもサーバサイドオンリー。
コーディング量も微々たる物で、親画面をさわろうったって不可能(笑)
ASP.NETの真価が生かしやすいフローだとは思いますが、邪道でしょうね(笑)

いやまぁ、僕の知らない機能とかでもっとスマートにできるのかもしれませんが。



_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-02-24 15:05
>>IEならScriptからshowModalDialogをよびだせますよ。
>おお、知らなかった(笑)。これはいわゆるVBScriptの命令の一つですねー。

ちがいます。
IEがもってるオブジェクトモデルに含まれてますから
JScriptからでも呼び出せます。

#J2EEつかったシステムでJScript使ってよびだしてるし。

>まるっきりWindow.Openのようだ(笑)。

仕組みのベースになってるのはWindow.Openでしょね。たぶん。

>しかし、残念ながらこの構文を使ってもいわゆるモーダルダイアログには
>ならず、親元も操作できてしまう・・・。

そんなことはないはずです。
これがモーダルダイアログになってなかったら、上記の
システムは破綻してますから。
こっちでは実際に動きをたしかめてるんですが、本当に
親元操作できます???

うりゅう
大ベテラン
会議室デビュー日: 2002/06/15
投稿数: 202
お住まい・勤務地: Hiroshima
投稿日時: 2003-02-24 15:42
えー、大変失礼いたしました(笑)
IEのクライアントサイドで問題なければ、shuさんのおっしゃるとおり
showModalDialogで何の問題もございません。解決しております。

>IEがもってるオブジェクトモデルに含まれてますから
>JScriptからでも呼び出せます。

MSから提供されているものだったら、なんでもVBScript(笑)呼んでしまう癖が(笑)

>こっちでは実際に動きをたしかめてるんですが、本当に
>親元操作できます???

いや、できませんでした(笑)。失礼いたしました。サンプルの見方が悪かった。

ということで、ttcoupeさん、IE限定という条件で問題なければ、showModalDialogで
なんの問題もないかと。

僕も大変参考になりました。shuさん、ありがとうございました。
_________________
--------------------------------------
ネットビルド 小田原貴樹
odahara@netbuiuld.jp
--------------------------------------
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-02-24 18:19
みなさんありがとうです。

そうですね、ここはワガママ言わずにクライアントスクリプトで
がんばってみます。

ありがとうございました。

小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-02-24 18:46
ワガママもなにも、window.openを利用するのもクライアントスクリプトを
利用する方法だと思いますが。。。

#もしかして、それがわかってなかった?
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-02-26 19:10
すみません。できないです(泣)

親ページ.aspx.vb
----------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ページを初期化する ユーザー コードをここに挿入します。
Button2.Attributes.Add("onClick", "GetDate();")
End Sub
----------------------------

親ページ.aspx
----------------------------
<script type="text/javascript">
<!--
function GetDate(){
var ret;
ret = showModalDialog('/Sample200/PopCalendar2.aspx', '', 'dialogheight:250px;dialogwidth:160px;status:no;help:no;scroll:no');
document.Form1.TextBox1.Value = "";
document.Form1.TextBox1.Value = ret;
}
//-->
</script>
----------------------------

子ページ.aspx.vb (カレンダーです)
----------------------------
Private Sub Calendar1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Calendar1.SelectionChanged
Dim strSource As String = Request.Params("source")
Dim dtmDate As DateTime = Calendar1.SelectedDate
Dim strScript As String = ""

strScript &= " <script language=javascript>"
strScript &= " parent.retValue = '" & dtmDate.ToString("d") & "';"
strScript &= " parent.close;"
strScript &= " </script>"
Response.Write(strScript)
End Sub
----------------------------

とすると新しいページが開くんです。
みなさんはどうやっていますでしょうか。

よろしくお願いします。
ttcoupe
大ベテラン
会議室デビュー日: 2003/01/17
投稿数: 116
お住まい・勤務地: 大阪市
投稿日時: 2003-02-26 19:10
すみません。
子ページの
Dim strSource As String = Request.Params("source")
は不要です。
小野@どっとねっとふぁん
ぬし
会議室デビュー日: 2001/10/30
投稿数: 402
投稿日時: 2003-02-27 09:53
みかんさんが言ってるあたり

:ただ、フレームを入れ子にしないとsubmitとかソースの表示とかできなくて開発は面倒ですけど。。。

が回答かな?
でも、これできちんと動くようにするのは結構面倒そう。

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