- PR -

大量データ表示後の Server.Transfer による画面遷移時のエラーについて

1
投稿者投稿内容
ノゲイラ
会議室デビュー日: 2006/08/24
投稿数: 4
投稿日時: 2006-08-24 13:45
■開発環境は以下の通りです。
WindowsXP Pro
Visual Studio 2003 (C#.Net)
.NetFrameWork 1.1 SP1

■問題点
以下、@、A、Bの処理を行います。

@FormA.aspx よりFormB.aspxに下記の記述にて画面遷移する。
→Server.Transfer("FormB.aspxのURL");

AFormB.aspx のPage_LoadイベントにてDBからの取得データをデータグリッドに表示。

BFormB.aspx のボタン(閉じる)クリック時に下記の記述にて
FormA.aspxに遷移する。(戻る)
→Server.Transfer("FormA.aspxのURL");

このとき、
Aにて表示するデータが少量の場合は、Bの動作が正常に行われますが、
Aにて表示するデータが大量の場合に、Bの動作が異常となり、
(ブラウザがハングアップしたような状態になる)
「ページを表示できません。」のHTMLが表示されてしまいます。

Bのボタンクリック時には、FormB.aspxのPage_Loadのイベントが発生
するはずなので、そこにブレークポイントを張ってみましたが、
そのブレークポイントに到達する前に上記エラーとなっています。

※推測ですが、Bの際に現在表示中のHTMLをどこかのエリアに
一時的に退避しようとして、データが大きすぎるがためにタイムアウトの
ような状態となっているのでは、と考えています。

書籍等で調査してみましたが、正直、画面遷移時の動作が
良く把握できません。

どなたか、本現象の原因と対応方法についてご教授願います。

宜しくお願い致します。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2006-08-24 14:01
大量データとはどの程度のサイズでしょうか?
はずしているかもしれませんが、web.configのmaxRequestLengthの値を大きくすることで改善されませんか?
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-08-24 14:04
大量のデータということなので、実際にはすべてのHTMLがブラウザ内にダウンロードされる
前にボタンをクリックしてしまい、動作が正常でなくなっている、ということはありませんか?

なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-08-24 15:16
引用:

ノゲイラさんの書き込み (2006-08-24 13:45) より:

BFormB.aspx のボタン(閉じる)クリック時に下記の記述にて
FormA.aspxに遷移する。(戻る)
→Server.Transfer("FormA.aspxのURL");

--

Aにて表示するデータが少量の場合は、Bの動作が正常に行われますが、
Aにて表示するデータが大量の場合に、Bの動作が異常となり、
(ブラウザがハングアップしたような状態になる)
「ページを表示できません。」のHTMLが表示されてしまいます。



まるでServer.Transferが正常に動作しないというような書き方ですが、
ご自分でも見ているようですけど、Server.Transferは全く無関係ですよね?

ポストバック時にViewStateのサイズが巨大になって、デフォルトの
リクエストサイズ制限値である4MBを超えてしまっているのが原因でしょう。
もし、ただ結果を表示するだけのページなのであれば、DataGridのViewStateを
オフにすればいいと思います。
そうでない場合は…微妙ですね…
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2006-08-24 15:19
NAL-6295です。

引用:

ポストバック時にViewStateのサイズが巨大になって、デフォルトの
リクエストサイズ制限値である4MBを超えてしまっているのが原因でしょう。
もし、ただ結果を表示するだけのページなのであれば、DataGridのViewStateを
オフにすればいいと思います。
そうでない場合は…微妙ですね…




そうでない場合は、ViewStateをサーバ側で保持する等が考えられますが、
サーバ側にかかる負荷を考えなくてはいけません。
ノゲイラ
会議室デビュー日: 2006/08/24
投稿数: 4
投稿日時: 2006-08-25 16:56
burton999さん、どっとねっとふぁんさん、なちゃさん、NAL-6295さん

maxRequestLengthの値の調整と、データグリッドの
ViewStateプロパティをオフにすることで解決しました。

ご回答有難うございました。
1

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