- PR -

画面遷移時にクリックイベント

1
投稿者投稿内容
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-05 15:53
VB.net2005でWeb開発をしているものです。
親画面、子画面があり
親画面ロードのタイミングで子画面をモーダルで表示させるリンクボタンをクリックさせたく、親のLoadCompleteイベントでクリックイベントを呼んでいますが、うまくいきません。現象としては親画面の表示が完了するまえに子画面が表示され、子画面を消してもまた子画面が出てきます。2個目の子画面を消して始めて白くなっていた親画面が表示されるという状態です。
完全に親が表示されてから子画面を出すにはどうしたらいいか悩んでいます。


Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete
lnkOrder_Clicked(CType(Me.dtg.Rows(0).Cells(0).FindControl("lnkOrder"), LinkButton), e)

End Sub

lnkOrder_Clickedでは子画面を開く処理を行っています。
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-07-05 16:15
前の質問のスレッドでの私の一言が余計だったかも知れません。
lnkOrder_Clicked の中で RegisterClientScriptBlock を使っているのであれば、
ページの初期化時に実行するクライアントサイドスクリプトを登録するときは、
RegisterStartupScript を使うようにして下さい。

RegisterClientScriptBlock はどこで呼び出しても、ページ表示よりも前に追加してしまうので、
そこでモーダルダイアログを表示すると、出力が止まってしまうのでしょう。
説明不足ですみませんでした。

引用:

Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete
lnkOrder_Clicked(CType(Me.dtg.Rows(0).Cells(0).FindControl("lnkOrder"), LinkButton), e)

End Sub


イベントハンドラは直接呼び出すものではありません。
ウィンドウを表示する処理を2回書きたくないのであれば、メソッドにして、
2つのイベントハンドラ内からそのメソッドを呼ぶようにしましょう。

【参考】
[ASP.NET]ページにJavaScriptを埋め込むには?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-07-05 16:16
Webサーバー側で行われている事とブラウザ上で行われていることに対する認識をしっかり分けましょう。
>親画面ロードのタイミングで子画面をモーダルで表示させるリンクボタンをクリックさせたく
サーバー側とクライアント側どちらのロードのタイミングですか?
そして、「リンクボタンをクリックさせたい」とおっしゃっているわりにはClickイベントハンドラをコードで呼び出しています。
このメソッド呼び出しはサーバー側の処理ですが、その内容は「子画面を開く処理」だとおっしゃいます。これはクライアント側での処理ですよね。

---------
ん、何かの続きなんですか?

[ メッセージ編集済み 編集者: 一郎 編集日時 2007-07-05 16:26 ]
KI
大ベテラン
会議室デビュー日: 2007/01/10
投稿数: 239
投稿日時: 2007-07-05 16:36
早とちりして書き込んじゃいましたが、
一郎さんのおっしゃるとおり、何かおかしいですね。
lnkOrder_Clicked の中って一体どうなってるんでしょう?

引用:

ん、何かの続きなんですか?


すみません、お気になさらないで下さい。
前スレッドで RegisterClientScriptBlock のことを書いたときに、
RegisterStartupScript のことを書いておくべきだったかなと思ったのですが
ちょっと話が違ったようです。
けい
常連さん
会議室デビュー日: 2004/12/03
投稿数: 47
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-06 10:16

>一郎様、KI様、ありがとうございます。
Webサーバー側で行われている事とブラウザ上で行われていることに対する認識をしっかり分けましょう。
>親画面ロードのタイミングで子画面をモーダルで表示させるリンクボタンをクリックさせたく
サーバー側とクライアント側どちらのロードのタイミングですか?

すみません、あまりよくわかってないのですが、親画面が表示されたタイミングで、という意味です。
>そして、「リンクボタンをクリックさせたい」とおっしゃっているわりにはClickイベントハンドラをコードで呼び出しています。
このメソッド呼び出しはサーバー側の処理ですが、その内容は「子画面を開く処理」だとおっしゃいます。これはクライアント側での処理ですよね。
リンクボタンをクリックするのはユーザーではなく画面を開いたと同時にクリック時と同じ動作をさせたいということです。紛らわしくてすみません。

>KI様
lnkOrder_Clicked内では子画面をモーダルで開く処理をしています。
--------------------------------------------------------------
strPopupScript &= "<script language=javascript>" & vbNewLine
strPopupScript &= "<!--" & vbNewLine
strPopupScript &= " var features = 'dialogHeight:740px,dialogWidth:980px,dialogLeft:' + (screen.width - 980)/2 + 'px, dialogTop:' + (screen.height - 740)/2 + 'px;'" & vbNewLine
strPopupScript &= " var w = window.showModalDialog('../../Components/Pms01Cmn050.aspx', window, features);" & vbNewLine
strPopupScript &= "// -->" & vbNewLine
strPopupScript &= "</script>" & vbNewLine
--------------------------------------------------------------
RegisterStartupScript でうまくいきました。ありがとうございます。前のように親画面が真っ白なまま子画面が表示ということはなくなったのですが、右下のプログレスバー表示されたままなのと、子画面がJavaScriptで指定したサイズにならないところです。showModalDialogの使い方が間違ってるのでしょうか?もう少し検証してみます。

1

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