- PR -

ASP.NETで新しいウィンドウでURLを開きたい

1
投稿者投稿内容
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2002-11-27 11:33
連続投稿で失礼します。

Webフォームでイベント発生時に新しいウィンドウでURLを開きたいのですが
方法がわからないで四苦八苦しております。

わかるかたかヒントや提案のあるかたがいらっしゃいましたら
教えていただけないでしょうか?
IE5.5以上で動作すれば他の環境で動かなくてもかまいません。

■やりたいこと
グリッドをクリックしたときに詳細を表示するWebページを別ウィンドウで
開きたい。

そのウィンドウはサイズも小さめでツールバーなどが表示されておらず
ポップアップウィンドウとして表示されることが望ましい・・・。

グリッドは市販の(UltraWebGrid)ですが、他のボタンなどと同じように
イベントプロシージャにプログラムできるので特に気にする必要はないはずです。

■考えたこと
Response.Redirectを使うと指定したURLへ移動できるのですが同じウィンドウに
表示されてしまうので目的を達成できませんでした。

DHTMLのwindowオブジェクトを使えば、
window.open("http://www.google.com/","self","width=740,height=520,toolbar=no,resizable=yes,scrollbars=yes");
で目的が達成できるのですが、ASP.NETのイベントプロシージャから
DHTMLのwindowオブジェクトにアクセスする手段はないように思えます。

どうぞよろしくおねがいします。
かんいち
会議室デビュー日: 2002/10/29
投稿数: 9
投稿日時: 2002-11-27 12:04
JAVASCRIPTで起動する方法って事でしょうか?
見当違いだったらすみません。

'javascript'の記述部****************************************
public static string OpenWindow()
{
string str_Script = "<script language='javascript'>";
str_Script+=window.open("http://www.google.com/","self",
"width=740,height=520,toolbar=no,resizable=yes,
scrollbars=yes);"+
"</script>";
return str_Script;
}

呼び出し側************************************
Response.Write(OpenWindow())

rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2002-11-28 09:22
かんいちさん、貴重な示唆をありがとうございます。
目的を達成することは出来ましたが、疑問があります。

なお、JavaScriptで新しいウィンドウを開きたいわけではなく、ASP.NETのイベントハンドラの中から新しいウィンドウを開きたいのです。
言語はVB.NETを使用していますが、他の言語のものでも翻訳して使えるので構いません。


■教えていただいたことを参考に目的を達成する方法


私にはかんいちさんのコードをどこに記述していいかわかりませんでしたが、検討の結果、次のように改造してaspx.vbファイルに記述すれば新しいウィンドウでURLを開けることが確認できました。

Private Sub OpenNewWindow(ByVal URL As String)

Dim St As String

St = "<SCRIPT LANGUAGE='javascript'>"
St &= "window.open('" & URL & "','self','width=300,height=350,toolbar=no,resizable=yes,scrollbars=yes');"
St &= "</SCRIPT>"

Response.Write(St)

End Sub

■疑問

この方法ではクライアントにJavaScriptを送信して、それを実行することになります。
つまり .NET Frameworkを使っていないですよね。
.NET Frameworkにはこのような機能はRedirectのほかにはないのでしょうか?

Page.NavigateTo("http://google.com/", "self", 740, 520)
'(このコードは動作しません。)

のようなメソッドは用意されていないのでしょうか?

ご存知の方がいらっしゃいましたらぜひ教えていただきたいです。


以上の疑問にもかかわらず、かんいちさんのおかげで所期の目的は何とか達成できました。
ありがとうございます。
ユーパロ
会議室デビュー日: 2002/11/28
投稿数: 2
投稿日時: 2002-11-28 10:25
新しいウインドウを開くためには必ずクライアント側でスクリプトを実行させなければなりませので、サーバー側(ASP.NET)でレスポンス内にスクリプトを埋め込んで返す方法しかないと思われます。(間違っていたらごめんなさい)
Response.Writeを使用する方法もありますが、私は専用のユーザコントロールを使用しページ内に埋め込んで使用しています。
これだと普段はVisibleをFalseにしておけば何もしませんが、ボタンがクリックされたイベント内でURLなどの必要な情報(URLなど)を設定しVisibleをTrueにしてスクリプトを有効にしています。

--ASCXのコード--
<script language="javascript">
window.open('<%= NavigateUrl %>' , '<%= Target %>' , '<%= Features %>'
, <%= Replace.ToString().ToLower() %> );
</script>
--VBのコード--
単一バインディングを行っている部分(<%= %>)に対応するプロパティを実装するだけです
例:Public Property NavigateUrl() As String

ユーザコントロールにするといろいろなスクリプトを埋め込むことができるので
結構便利です。


[ メッセージ編集済み 編集者: ユーパロ 編集日時 2002-11-28 11:24 ]
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2002-11-28 13:35
ユーバロさん、ありがとうございます。

確かに新しいウィンドウを開く処理はクライアント側で実行させる必要があるように思います。

ただクライアント側に入力チェック用のJavaScriptを自動的に生成するくらいのことをやってのける .NET Framework のことだから、こういった処理も何かあるのでは…と考えた次第です。

それよりも、後段のユーザーコントロールを使用してスクリプトを埋め込むという発想は大いに参考になりました。今回のように新しいウィンドウを開く以外にもさまざまな用途で使えそうです。

教えていただいたことに感謝します。
1

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