- PR -

サーバーサイドの途中でクライアントにメッセージ出力

投稿者投稿内容
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-17 12:13
こんにちわ。

現在、VS2008でC#のWebフォーム開発を行っています。
.NETの基本スタイルとしてラウントトリップがありますが、
以下のような処理はできるのでしょうか?ご教示下さい。

@.ボタン押下
A.サーバーサイドでデータ検索
B.例えばAの検索で他の人がデータを使用中だったのでユーザーに通知(処理終了)
C.Aの検索でデータが未使用なら後続の処理を実施(更新処理など)

ここで困っているのは、Bのユーザーに通知する方法が
画面内に表示するエラーメッセージならば、ポストバック後の画面に表示することを
イメージできるのですが、ポップアップメッセージを出力したいのです。

今は苦し紛れにポストバックした後の最後でjavascriptをサーバーサイドの
プログラムに無理やり埋め込んで出力しています。

もっとスマートな処理の仕方が無いかをどなたか是非ご教授下さい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-06-18 07:10
私もそのように行いました。

ところで、あなたが考える「スマートな方法」とは、何が、どの様に、よりスッキリとまとまっているのでしょう?
あるいは、現状のどの様な点を、ファットだと考えていらっしゃるのでしょう?
何をどう感じるかは人や場合によって異なります。あなたの感性を、他人に、説明してください。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2008-06-18 08:12
Ajaxを実装してScriptManagerの
PageRequestManager_endRequestイベントを利用したらどうでしょうか。
ポップアップに表示するメッセージはThrowステートメントで設定します。

こんな感じです。

コード:
function pageLoad() {
  // Create the event handlers for PageRequestManager
  var prm = Sys.WebForms.PageRequestManager.getInstance();
    
  prm.add_initializeRequest(PageRequestManager_initializeRequest);
  prm.add_beginRequest(PageRequestManager_beginRequest);
  prm.add_endRequest(PageRequestManager_endRequest);
}

function PageRequestManager_endRequest(sender, args) {
  // サーバ側で発生した例外の詳細メッセージを表示
  // メッセージはThrowステートメントで設定する
  alert(args.get_error().message);

  // 発生した例外が処理済みであることを宣言
  args.set_errorHandled(true);
}



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-18 11:19
回答ありがとう御座います、Accessさん。

---------------------------------------------------
//サーバー側で発生した例外の詳細メッセージを表示
alert(args.get_error().message);
---------------------------------------------------
この部分のalert()はAjaxを実装しないとできないということですよね?
今回、Ajaxは実装しない方針なので残念ですがこの方法はできないということで。

◆Jittaさん
すみません、漠然と「スマートな方法」と記述してしまった理由は
自分が.NETプログラミングのスキルが低いので概念やメソッドなどの知識不足から
苦労していると思っておりまして。
表現が良くなかったです。

ありがとう御座いました。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-25 12:35
どうも、こんにちわ。
以前話題に上げさせてもらったメッセージ出力について再度ご教示下さい。

【開発環境】
VS2008、C#、Ajaxは未使用
【質問内容】
現在、ボタン押下でラウンドトリップする際にサーバーサイドで例えばデータ件数を
カウントして、ZERO件だったらユーザーにポップアップメッセージで通知。
これを実施するのに、サーバーサイド処理の最後に「Response.Write」で
Javascriptを埋め込み、HTMLのレンダリングの先頭にJavascriptが追記されて
出力する状態です。

この方法だとラウンドトリップしてクライアント側に帰ってきたとき、
HTMLのレンダリングの前にJavascriptが実行され、ポップアップは出るのですが
背景にあるブラウザー画面が処理途中の真っ白な状態で、ポップアップのOKボタンを
押さないとレンダリングされないままです。

画面表示がされた状態でメッセージを出力する方法があれば
どなたかご教示下さい。
(ダミーの画面とかを挟まないと実現できないのでしょうか)
宜しくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-25 12:38
問題はResponse.Writeなんて使ってるとこにあると思います。
ASP.NETでJavaScriptを利用する場合、専用の登録用クラスがあります。
Liquid_Force
大ベテラン
会議室デビュー日: 2003/08/28
投稿数: 102
投稿日時: 2008-06-25 14:36
どっとねっとふぁんさんコメントありがとう御座いました!

勉強不足でした。
RegisterStartupScriptメソッドですね。
ありがとうございました。

Response.Writeの方法は力技過ぎますし、動作が保障できないですね。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-06-25 16:56
いや、動作が保証できないわけではなく、ASP.NETの仕組みから、Response.Writeを利用すると、aspxページのタグの出力の前にResponse.Writeで書き込んだ文字が出力されます。
そんなHTMLが正しいわけがないので、Response.Writeは使わないようにしましょう、ということです。

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