- PR -

Webフォーム上で表示させるダイアログのメッセージに変数を表示させるには?

投稿者投稿内容
alf
常連さん
会議室デビュー日: 2005/11/15
投稿数: 22
お住まい・勤務地: 岐阜県・愛知県
投稿日時: 2005-12-07 09:47
 alfです。
 いつも参考にさせて頂いています。

 表題の件ですが通常Webフォーム上でメッセージダイアログを表示させる場合、

  ImageButton.Attributes["onclick"] = "return alert('最大選択数を越えています');";

 等で可能ですが、状況によって表示させるメッセージを変更すべく、

  string strMsg;
  strMsg = "今は5番が選択されています"
  ImageButton.Attributes["onclick"] = "return alert(strMsg);";

 等と(文字列)変数を入れると、

 『Microsoft JScript 実行時エラー:'strMsg'は宣言されてません』

 というエラーメッセージが出てアプリが中断されます。

 自分なりに類推するキーワードを元に、ここの掲示板の過去ログやGoogle等で色
 んなサイトを調べてみましたが、有益な情報が得られなかったので質問させて頂
 いた次第です。

 エラーメッセージを見る限りJavaScriptが関連していると思われますが、よろし
 くお願いします。

 開発環境:C#+ASP.NET(.NET 2003)
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-12-07 09:53
"return alert(strMsg);"

というのは、クライアント側に書き出され、クライアント側で実行されるJavaScriptですよね。
JavascriptでstrMsgという変数は定義されているんですか?

string strMsg;
strMsg = "今は5番が選択されています"

のstrMsgはサーバー側(.NET)の変数ですので、これとは関係ありません。
やるなら

ImageButton.Attributes["onclick"] = "return alert('" + strMsg + "');";

こうかな。

---------------
忘れてましたが、
strMsg内の\と"は、それぞれ\\と\"に置き換える必要がありますね。

[ メッセージ編集済み 編集者: 一郎 編集日時 2005-12-07 10:01 ]
alf
常連さん
会議室デビュー日: 2005/11/15
投稿数: 22
お住まい・勤務地: 岐阜県・愛知県
投稿日時: 2005-12-07 13:27
 一郎さん、迅速なレスポンス有難うございます。

 すいません、Webアプリなのにクライアントとサーバーどちらで処理を
 させるものなのか曖昧でした。
 仰るとおり、クライアント側で実行させたいjavascriptです。

 あと、質問の内容が不足していました。
 目的はjavascriptで定義してある変数に対して、C#内で算出した変数を
 代入する事が可能か?という事です。

 以下に具体例を書きます。

 // *.aspx内で定義
 <script language="JavaScript">
 var strMsg = 'abcde';
</script>

 // *.cs内のPage_Load()等
string str;
 ・・・
 ・・・ ← strを算出する一連の処理
 ・・・
 ImageButton.Attributes["onclick"] = "return alert(strMsg);";

ここで、何とかしてstrMsgにstrを代入したいのですが可能でしょうか?

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-12-07 14:32
引用:

alfさんの書き込み (2005-12-07 13:27) より:
 // *.aspx内で定義
 <script language="JavaScript">
 var strMsg = 'abcde';
</script>


例えばTestValueってフィールドやプロパティをメンバに追加しておいて
コード:
 <script language="JavaScript">
 var strMsg = <%=TestValue%>;
  </script>


とか。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-07 15:21
隠しフィールドとか。

RegisterHiddenField("strMsg","今は5番が選択されています");
ImageButton.Attributes["onclick"] = "return alert(this.form.strMsg);";
alf
常連さん
会議室デビュー日: 2005/11/15
投稿数: 22
お住まい・勤務地: 岐阜県・愛知県
投稿日時: 2005-12-07 17:36
 なちゃさん,todoさん、迅速なレスポンス有難うございます。

【なちゃさんの書き込み】
>例えばTestValueってフィールドやプロパティをメンバに追加しておいて
>コード:
>-------------------------------------------------------------------------------
> <script language="JavaScript">
> var strMsg = <%=TestValue%>;
> </script>
>-------------------------------------------------------------------------------
>とか。

 JavaScriptは未経験なので目下調べながら業務を進めていますが、フィールドや
 プロパティという言葉の意味を調べて、頂いたレスを自分なりに次のように解釈
 しましたがどれもコンパイルエラーや実行時にJScriptの構文エラーが出てしまい、
 解決に至りませんでした。
 申し訳ありませんが、もう少し助言して頂けると助かります。m(__)m

 1.デザイン画面で何かWebコントロール(TextBox等)を追加し、そのIDをTestValueとする
 2.html画面でTextField等を追加し、そのnameをTestValueとする
 3.*.cs側でメンバ変数を追加し、その名前をTestValueとする


【todoさんの書き込み】
>隠しフィールドとか。
>RegisterHiddenField("strMsg","今は5番が選択されています");
>ImageButton.Attributes["onclick"] = "return alert(this.form.strMsg);";

 また、todoさんから頂いたレスの方はダイアログが表示されるようになったの
 ですが、RegisterHiddenField()の第二引数(string)に何を指定しても、どうい
 うわけか表示されるメッセージが必ず[object]になってしまいます。

 お二方のレスを参考にもう少し調べてみます。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-12-07 18:37
引用:

alfさんの書き込み (2005-12-07 17:36) より:
 3.*.cs側でメンバ変数を追加し、その名前をTestValueとする


でできるはずですが…
javascriptで文字列にするためには、シングルクォートなどで囲ってやる必要がありますね。

*.aspx.cs側のクラス内で、
protected string TestValue;

どこかのメソッドなどで、
TestValue = "ほげほげ";

*.aspx内のjavascript部分で、
var strMsg = '<%=TestValue%>';
もしくは
var strMsg = "<%=TestValue%>";
※クォートを足しました。

引用:

 また、todoさんから頂いたレスの方はダイアログが表示されるようになったの
 ですが、RegisterHiddenField()の第二引数(string)に何を指定しても、どうい
 うわけか表示されるメッセージが必ず[object]になってしまいます。


同じくクォートの話、かな?
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-12-07 19:19
mageButton.Attributes["onclick"] = "return alert(this.form.strMsg.value);";
でした。

this.form.strMsgが隠しフィールド <input type="hidden" name="StrMsg" value="値">で、
そのvalueプロパティで値を取得する。

http://www.microsoft.com/japan/msdn/library/ja/jpisdk/dhtml/references/objects/INPUT.asp?FRAME=true#hidden

[ メッセージ編集済み 編集者: todo 編集日時 2005-12-07 19:24 ]

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