2012-01-06 5 views
0

私は最近、データベースからいくつかのレポートを含むインデックスページと、そのページの内容を更新するいくつかのフォーム(すべてASP.NET内)で構成される小さなアプリケーションを作成しています将来MSChartを使用する方法を学ぶために、C#を使用します。Response.RedirectとMSCharts

インデックスページには、ドロップダウンボックスで選択した5つのレポートが表示されます。デフォルトでは、最初のページが選択され、常にページにチャートが表示されます。

グラフが機能していて、インデックスページで私が望んでいたものが表示されていて、データベースを更新するフォームも仕事をしました。しかし、ユーザーがインデックスページに戻ってきたこれらのページの「終了」ボタンをクリックすると、画像が存在しないかのように、表示されていたはずのチャートが赤い「×」になります。私がページをリフレッシュしたら、それはすべきであるように現れた。

ExitボタンはResponse.Redirect()を使用してユーザーをインデックスページに戻し、これが正しい方法であることを確認しました。結局、私はServer.Transfer()の代わりに、ページの実行サイクルの点で両者の間に大きな違いがないことをすべてのサイトが示しているにも関わらず、代わりにResponse.Redirect() Server.Transferは新しい要求をしませんでした。

しかし、Server.Transfer()を使用すると、問題は解決しました。まあ、それは素晴らしいです!

誰でもこれがなぜ機能するのか説明できますか?

更新 - 一部のコードは、まったく役に立ちます。

当然のことながら、更新フォームからの問題のイベントの1つは、もともとはResponse.Redirect()です。

protected void Exit_Click(object sender, EventArgs e) 
    { 
     Server.Transfer("Default.aspx"); 
    } 

はDefault.aspxからのPage_Load:レポートクラスの

protected void Page_Load(object sender, EventArgs e) 
    { 
     Report report = new Report(reportList.SelectedIndex); 
     ChartPanel.Controls.Add(report.Chart); 
    } 

概要 - これは基本的に私はcreateChartFromParameters()メソッドで指定した各種レポートのラッパーです。チャートを設定してUIに終わらないようにするだけで、チャートオブジェクト自体をUIに持たせることができます。誰かが役に立つと思ったら実装を投稿することができますが、それは何かのように醜いですし、実際にはかなり長いです。

public class Report 
{ 
    private Chart chart { public get; } 

    public Report(string title, string command, string x, string y, string label, string legend, SeriesChartType type) 

    public Report(int presetChartNum) 

    private void createChartFromParameters(string title, string command, string x, string y, string label, string legend, SeriesChartType type, int customcode = 0) 
} 
+0

コードを見ずに伝えるのは難しいです。私が推測できるのは、Server.Transferが実行を停止し、応答がすぐにリダイレクトされるということだけです。リダイレクトは実行を完了し、問題を引き起こした意図しないコードが実行されていた可能性があります – user1231231412

+0

興味のあるコードをポップしますが、正直言って私は十分に投稿できるとは思わない - アプリケーションコードの約半分をアップロードする必要があります。コードの多くを読んで苦労している人はいません。P – Hecksa

+0

**アップデート**:コードが追加されました。 – Hecksa

答えて

1

私は、これはサーバオブジェクトとレスポンスオブジェクトはリダイレクト

それは、クライアントが新しいリソースにリダイレクトされる方法で、何端からやるべきことがたくさん持っているに実行する方法の誤解であると信じてそれはそうし、後でどのオブジェクトにアクセスできるかを示します。

私はそれをすべて入力することができましたが、ここには良いリソースがあります。

http://techahead.wordpress.com/2007/10/14/aspnet-servertransfer-vs-responseredirect/

+0

素晴らしい記事、ありがとう。私はしばらくこのようなものを探しましたが、徹底的に見つけられませんでした。 それを読んで、私の状況がどうなったのか分かりません。 Response.Redirectがやっているように見える何もないページがロードされたとき、私のコードはうまく動いていました.Jon Cがコメントで示唆したように、リダイレクトプロセス中にまだ実行中のコードは見えません。 Response.RedirectとブラウザのURLバーの間には基本的な違いがありますか?私は両方が最初からHTTPリクエストを行うと信じているので、結果は同じではないはずですか? – Hecksa

+0

実際、Response.Redirectは現在のレスポンスオブジェクトを停止し、新しいものを開始し、新しいものを開始し、新しいものを生成します。したがって、ここで説明するThreadAbort例外http://msdn.microsoft.com/en-us/library/a8wa7sdt %28VS.80%29.aspxアドレスバーにURLを入力すると、新しいページのライフサイクルが開始されます。私はこれがリダイレクトがリダイレクトしなかった場所でうまくいった理由だと思う。 – Sabre

+0

Gotcha。 Response.Redirectがまったく新しいライフサイクルを開始していない場合、問題を引き起こしていた可能性があることを考えることができるいくつかのことが考えられます。どうもありがとう :) – Hecksa

関連する問題