- PR -

WebFormを更新表示する方法(C#)

1
投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2003-07-30 09:22
質問が4つあります。よろしくお願いします。

背景
これまでWindowsFormしか使った事がありませんでした。
WebFormにも興味があるので、試みにbottunをClickすると
Label.Textに文字列を代入するという単純なプログラムを書きました。
WebFormの場合WindowsFormと異なりServer/Cliantに分かれているので
そのままではLabel.Textの更新結果が画面表示に反映されません。
WebFormを更新表示する方法が分かりません。

// テストプログラム

private void Button1_Click(object sender, System.EventArgs e)
{
// 画面はデフォルトの"Label1"からStart"に更新表示される
// ★質問1 更新処理を記述した覚えが無いのに自動で更新表示されるはなぜか?
Label1.Text = "Start";
timer1.Interval = 1000;
timer1.Start();
timer1.Enabled = true;
}
// timer1のジャンプ先
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
DateTime t = DateTime.Now;
string str = String.Format("{0:yyyy/MM/dd hh:mm:ss}",t);
// 画面はいつまでも"Start"のままである
// ★質問2 現在時刻を1秒ごとに更新表示するにはどうすればよいか?
//      できれば下記2つの方法の両方を知りたい(簡単にできるなら)
//       @WebForm全体を更新表示する方法
//       ALabel1.Textだけを更新表示する方法
// ★質問3 質問1の場所では更新表示されるのにこちらは更新表示されない。
//      両者の違いはどこからくるのか?
Label1.Text = str;
// デバッグのために挿入してみた。
// ★質問4 "出力"欄にConsoleの記録が無いのはなぜか?
Console.WriteLine(str);
}
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-07-30 09:36
引用:

ひろしさんの書き込み (2003-07-30 09:22) より:

WebFormを更新表示する方法が分かりません。


        :
引用:

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
DateTime t = DateTime.Now;
string str = String.Format("{0:yyyy/MM/dd hh:mm:ss}",t);


        :
引用:

Label1.Text = str;


Webシステムの動作を勘違いしているようですね。
クライアント側からのHTTPリクエストがない限り、いくらWebサーバ側でタイマーを使用してページを更新しようにも、クライアント側(ブラウザ)が受け取れないでしょう。
Visual Studio .NETは魔法の杖か?でいうところの「罠」から抜け出してください。

このようなタイマーによる自動更新処理は、ブラウザ上のスクリプト(VBScriptやJScript)で行うべきでしょう。


[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2003-07-30 10:33 ]
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2003-07-31 01:55
回答ありがとうございます。
ご指摘の通り、HTMLのプログラムの経験が無いのでこの辺が弱いです。
確かにクライアントのイベントの受け取り手はどこだろうかと気になっていました。
ただ、未だ疑問は残っています。
クライアント下記の更新表示はなぜ成功するのでしょうか?
<2003-07-30 09:22より引用>
// 画面はデフォルトの"Label1"からStart"に更新表示される。
// ★質問1 更新処理を記述した覚えが無いのに自動で更新表示されるはなぜか?

今回はどうしてもServer側でできるだけ処理をしたい理由があります。
実システムではDMA方式のDIOやADボードがサーバーに接続されていて外部トリガーで
リアルタイムに製造ラインのモニタリングをしているのです。よって、殆どの情報は
サーバーに存在しています。Timer類もサーバーを基準クロックにしたいのです。
WindowsFormでの試作プログラムは要求性能を満たす事に成功しました。

ただ、小しの変更でWebFormに置き換えられれば遠隔監視できて便利かも
知れないと思いWebFormに興味を持っています。
クライアントは@ボタン操作Aモニタリング内容の更新表示、の2つができれば良い
と思っています。幸い、クライアントは2〜3台で表示情報量も少なく、応答性も
厳しく要求されない(数秒遅れても良い)ので、入門演習として簡単に
取り組めたらと思っています。

ご指摘のVBScriptやJScriptを勉強するのが最良でしょうか?
(どなたか、おすすめ本があったら教えてください)
とりあえずイベントを受け取って更新表示するだけだったらJscriptで
数行程度で済んでしまうのでしょうか?
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2003-07-31 07:47
引用:

ひろしさんの書き込み (2003-07-31 01:55) より:
ご指摘の通り、HTMLのプログラムの経験が無いのでこの辺が弱いです。


最低でもブラウザとWebサーバとの関係、動作などは理解しておかないといけないです。
これを理解せずに闇雲に突き進んでも無理が出てきます。

引用:

ただ、未だ疑問は残っています。
クライアント下記の更新表示はなぜ成功するのでしょうか?
<2003-07-30 09:22より引用>
// 画面はデフォルトの"Label1"からStart"に更新表示される。
// ★質問1 更新処理を記述した覚えが無いのに自動で更新表示されるはなぜか?


それは、「Button1というボタンを押した」というイベントをWebサーバ側で処理し、その結果をブラウザに送り返したから表示されるのです。
大まかな動作原理の概要は、ASP.NETの場合、下のような感じです。

コード:
  ブラウザ    ┃      Webサーバ側(IIS・ASP.NET)

━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━
URLを入力 ──────→ *.aspx.cs の Page_Loadメソッド実行
          ┃        │ (ページ表示の初期処理)
          ┃        │
ページを表示 ←───────────┘
 │ (初期表示) ┃
 :        ┃
 :        ┃
 ↓        ┃
ボタンを押す ──────→ *.aspx.cs の Page_Loadメソッド実行
          ┃        │ (ページ表示の初期処理)
          ┃┌───────┘
          ┃│
          ┃└─→ *.aspx.cs の Button1_Clickメソッド実行
          ┃        │ (ボタン押下イベント処理)
          ┃        │
ページを表示 ←───────────┘
   (結果表示) ┃



注意しなければいけないのは、あくまでも「ブラウザ側からのイベント」を処理している、という点です。
ブラウザ側から何もアクション(=イベント)がなければ、Webサーバ側で何をしても、ブラウザ側に結果を送り返すことができません。
というか、そんなことができたら自分のPCを乗っとられそうで恐ろしい・・・

引用:

ご指摘のVBScriptやJScriptを勉強するのが最良でしょうか?
(どなたか、おすすめ本があったら教えてください)
とりあえずイベントを受け取って更新表示するだけだったらJscriptで
数行程度で済んでしまうのでしょうか?


「JavaScript」(←JScript)の書籍は沢山ありますし、Yahooなどの検索をかければいろいろなサイトで学べます。
(VBScriptは、とりあえず避けたほうがいいかも。)


[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2003-07-31 07:53 ]
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2003-08-01 23:58
ご回答ありがとうございます。
以下駄文
Javaか…また覚える事が増えてしまう…。
10年後はWebアプリもWindowsアプリもマクロもバッチコマンドも
一貫した構文体系で記述できれば無駄が無くて素晴らしいのですが…。
美しくないし、学習効率が悪いなぁ。
ぐちを言っても仕方が無いけれど、もっと創造的なことのほうに時間をかけたい…。
(Javaはエレガントで評判が良いらしいからがまんして勉強しようか…)
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2003-08-02 00:23
引用:

Javaか…また覚える事が増えてしまう…。

ぐちを言っても仕方が無いけれど、もっと創造的なことのほうに時間をかけたい…。
(Javaはエレガントで評判が良いらしいからがまんして勉強しようか…)


え〜、JavaとJavaScript/JScriptは根本的に別物です…
一応…
やむ
会議室デビュー日: 2003/08/02
投稿数: 17
投稿日時: 2003-08-02 09:02
 私もサーバー側でクライアントの表示を制御できればいいなと思っているのですが、JavaScriptをHTMLに埋め込むか、クライアント内で実行できるプログラム(ActiveXやJavaApplet)を送り込むことしか知りません。
 他に方法はないんでしょうか。
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-08-02 09:22
おはようございます。
引用:

ひろしさんの書き込み (2003-07-30 09:22) より:
// ★質問2 現在時刻を1秒ごとに更新表示するにはどうすればよいか?
//      できれば下記2つの方法の両方を知りたい(簡単にできるなら)
//       @WebForm全体を更新表示する方法



クライアントサイドでの対応になってしまいますが、一定時間毎にサーバーのHTMLページを
取得する最も単純な方法として

<head>
<meta http-equiv="refresh" content="30;サーバーURL">


</head>
(30秒更新の例です。)
というタグを書き出すHTMLの中に入れておきます。(ただし一部のブラウザでは動かない
場合もあります。Win IEでしたら問題ないです。)
# これは表示されているHTMLページ全体が更新されるので、今回のご質問を満足するものでは
# ありませんが・・・。

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-08-02 09:27 ]
1

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