- PR -

クライアントにメッセージを表示する処理を共通化したい

投稿者投稿内容
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-04-05 16:06
ByRefはいらんと思うのですが…

--追記
これでは直前のとっとさんに返信したようですね…
そうではなくて、ByRefをつけるという内容に対しての投稿です。

[ メッセージ編集済み 編集者: なちゃ 編集日時 2004-04-05 16:08 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 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 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-05 16:19
引用:

なちゃさんの書き込み (2004-04-05 16:06) より:

そうではなくて、ByRefをつけるという内容に対しての投稿です。


 もちろん、ByVal(デフォルト)でも、この場合どちらでも機能するし、「安全」なのですが、「コピー」に時間がかかると思って…違いましたっけ?

 Pageオブジェクトをコピーするのではなく、Pageオブジェクトへの参照を保持するオブジェクトをコピーする???
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-04-05 16:20
引用:

とっとさんの書き込み (2004-04-05 16:03) より:

エラーメッセージも特に出ませんでした。もう少し自分でやってみます。すいませんでした。



<指摘ミス>
実際に動かしてHTMLソースを見てみましたが、HTMLの方が、スクリプトを自動的に実行する設定になっていないようですね。

MSDNライブラリのPage.RegisterStartupScript メソッドのサンプルにあるとおり、

  • Msgクラスで生成するスクリプトを、関数定義に変える
  • <BODY>タグにonLoad属性をつけ、定義した関数を呼ぶ
とか、かな?

追記: ↑今色々試してますが、まだ何か違うような……。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-05 16:30 ]
</指摘ミス>
ということで、この内容は無視してください。別記しています。

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-04-05 16:39 ]
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-05 16:32
引用:

Jittaさんの書き込み (2004-04-05 16:19) より:
 Pageオブジェクトをコピーするのではなく、Pageオブジェクトへの参照を保持するオブジェクトをコピーする???


Pageは参照型なので、ByValの場合Pageオブジェクトを参照しているものがコピーされます。(.NETの世界では、いわゆるオブジェクトとして扱われていないのでものと書いてみました)
Pageオブジェクト自体はコピーされません。
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-04-05 16:34
引用:

とっとさんの書き込み (2004-04-05 16:03) より:

コード:
script.Append("window.alert(" & sendMsg & ");")




ここが原因ですね。
コード:
window.alert(登録しました);


になり、スクリプトとして不正です。

ということで、
コード:
script.Append("window.alert(""" & sendMsg & """);")


でしょう。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-05 16:41
引用:

一郎さんの書き込み (2004-04-05 16:32) より:
Pageは参照型なので、ByValの場合Pageオブジェクトを参照しているものがコピーされます。


 あ…そうですね 値型と参照型があるのでした。。。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 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イベントは記述しないでも大丈夫でした。
どうもありがとうございました。

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