- PR -

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

投稿者投稿内容
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-04-05 14:48
こんにちは。いつもお世話になります。

webフォームでクライアントにメッセージを表示する処理を行っています。
その処理自体は以下のように

Dim script As New System.Text.StringBuilder
script.Append("<script language=""JavaScript"">")
script.Append("window.alert('登録しました');")
script.Append("</script>")
Page.RegisterStartupScript("authenticated", script.ToString)

実行出来ます。
この処理をどのフォームからでも呼出して使えるように共通のクラスとして記述して
それを呼出したいのですが上手く行きません。

'クライアントにメッセージ表示
Public Class Msg


Sub MsgShow(ByVal key As String, ByVal sendMsg As String)


Dim aaa As (呼び出し元クラス名) = New (呼び出し元クラス名)
Dim script As New System.Text.StringBuilder
script.Append("<script language=""JavaScript"">")
script.Append("window.alert(" & sendMsg & ");")
script.Append("</script>")
aaa.Page.RegisterStartupScript(key, script.ToString)

End Sub

End Class
として、呼び出し側からは

Dim msg As Msg = New Msg
Call msg.MsgShow("key", "登録しました")

としましたが、反応がありません。どこが間違いをご指摘頂ければ大変ありがたいのですが。
よろしくご教授のほどお願いします。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-04-05 15:00
Dim aaa As (呼び出し元クラス名) = New (呼び出し元クラス名)
で作成されるオブジェクトと
呼び出し側のオブジェクトは「クラス」は同じですが「実体」は別々です。

当然、別の実体に設定しているので元の呼び出し側の実体には反映されていません。

なのでPageオブジェクトを引数として渡してみてください

一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-04-05 15:01
「(呼び出し元クラス名)」というのはPageのメンバか何かですかね。

aaaは呼び出し元のオブジェクトと同じ型ですが同じインスタンスではありませんよね?
(MsgShowの中でNewしているのだから)
なので、そのメンバのaaa.Pageも、現在サーバー側で処理を行っているページとは別物だったりしませんか?

-------
かぶっちゃった

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-04-05 15:02 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-05 15:09
 ついでに、Shared宣言すれば、実体を宣言する必要もありませんよ。

Public Class Msg
Public Shared Sub MsgShow( _
ByRef RegistPage As Page, ByVal key As String, ByVal sendMsg As String)

使い方:
Msg.MsgShow(me, "key", "登録しました")
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-04-05 15:10
お二人とも早速のご返答ありがとうございます。おっしゃっている事の意味は分かりました。

>なのでPageオブジェクトを引数として渡してみてください

の方法が分かりません。引数として渡す前にどのような記述が必要なのでしょうか?
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-04-05 15:24
Jittaさん、ありがとうございます。Jittaさんのご指摘の通り出来れば一番ベストだと
思います。
しかし自分の知識不足からSharedを頭に付けただけでは上手くいきませんでした。
もう少し詳しく教えていただけないでしょうか?
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-04-05 15:57
引用:

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

しかし自分の知識不足からSharedを頭に付けただけでは上手くいきませんでした。


といいますが、
引用:

Jittaさんの書き込み (2004-04-05 15:09) より:

ByRef RegistPage As Page, ByVal key As String, ByVal sendMsg As String)


は無視ですか?

で、どのように「上手くいかない」んですか? エラーメッセージは?
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-04-05 16:03
ぢゃん♪さん、言葉足らずですいません。

Public Class Msg


Public Shared Sub MsgShow(ByRef 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 msg As Msg = New Msg
Call msg.MsgShow(Me, "key", "登録しました")
としました。デバッグ中にRegistPage の値を見ると呼出し元フォームのクラス名が
きちんと取れているようでしたが、何も起りませんでした。
エラーメッセージも特に出ませんでした。もう少し自分でやってみます。すいませんでした。

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