- - PR -
クライアントにメッセージを表示する処理を共通化したい
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-04-05 16:06
ByRefはいらんと思うのですが…
--追記 これでは直前のとっとさんに返信したようですね… そうではなくて、ByRefをつけるという内容に対しての投稿です。 [ メッセージ編集済み 編集者: なちゃ 編集日時 2004-04-05 16:08 ] | ||||||||||||||||
|
投稿日時: 2004-04-05 16:18
そうですね、ByRefにする必要はないですね。
>Dim msg As Msg = New Msg >Call msg.MsgShow(Me, "key", "登録しました") MsgShow()は静的メンバなので、MsgをNewする必要はありません。 あと、クラスとインスタンス名を同じにしない方がいいですよ。(VB.NETでは大文字小文字区別しませんからね) 実際にブラウザに表示されるHTMLのソースはどうなってます? 表示しようとしたJavascriptは出力されてませんか? >script.Append("window.alert(" & sendMsg & ");") で、Javascriptの文字列を''で囲んでいないようですけど、それは関係ありませんか? [ メッセージ編集済み 編集者: 一郎 編集日時 2004-04-05 16:20 ] | ||||||||||||||||
|
投稿日時: 2004-04-05 16:19
もちろん、ByVal(デフォルト)でも、この場合どちらでも機能するし、「安全」なのですが、「コピー」に時間がかかると思って…違いましたっけ? Pageオブジェクトをコピーするのではなく、Pageオブジェクトへの参照を保持するオブジェクトをコピーする??? | ||||||||||||||||
|
投稿日時: 2004-04-05 16:20
<指摘ミス> 実際に動かしてHTMLソースを見てみましたが、HTMLの方が、スクリプトを自動的に実行する設定になっていないようですね。 MSDNライブラリのPage.RegisterStartupScript メソッドのサンプルにあるとおり、
追記: ↑今色々試してますが、まだ何か違うような……。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-05 16:30 ] </指摘ミス> ということで、この内容は無視してください。別記しています。 [ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-05 16:39 ] | ||||||||||||||||
|
投稿日時: 2004-04-05 16:32
Pageは参照型なので、ByValの場合Pageオブジェクトを参照しているものがコピーされます。(.NETの世界では、いわゆるオブジェクトとして扱われていないのでものと書いてみました) Pageオブジェクト自体はコピーされません。 | ||||||||||||||||
|
投稿日時: 2004-04-05 16:34
ここが原因ですね。
になり、スクリプトとして不正です。 ということで、
でしょう。 | ||||||||||||||||
|
投稿日時: 2004-04-05 16:41
あ…そうですね ![]() | ||||||||||||||||
|
投稿日時: 2004-04-05 16:44
ぢゃん♪さんのおっしゃる通りでした。しょうもないミスですいません。
多くの方にご協力いただき大変感謝しています。完璧に自分のものに出来るよう頑張ります。 最終的には、 'クライアントにメッセージ表示 Public Class Msg Public Shared Sub MsgShow(ByVal RegistPage As Page, ByVal key As String, ByVal sendMsg As String) Dim script As New System.Text.StringBuilder script.Append("<script language=""JavaScript"">") script.Append("window.alert(""" & sendMsg & """);") script.Append("</script>") RegistPage.RegisterStartupScript(key, script.ToString) End Sub End Class 呼び出し側 Dim cltMsg As Msg Call cltMsg.MsgShow(Me, "abcd", "登録しました") となりました。HTMLのBODYタグにはonloadイベントは記述しないでも大丈夫でした。 どうもありがとうございました。 |