我一直在研究一個小應用程序,它最近由一個索引頁面組成,這個索引頁面包含幾個運行數據庫的報表,然後是一些用於更新該頁面內容的表單使用C#,以便將來學習如何使用MSCharts。Response.Redirect和MSCharts
索引頁面可以顯示我設置的5個報告中的任何一個,通過下拉框選擇。默認情況下,第一個選擇是應該總是在頁面上顯示一個圖表。
我得到了圖表的功能,並顯示我希望他們在索引頁上的罰款,並更新數據庫的表單也做了他們的工作。但是,當我點擊其中一個頁面上的「退出」按鈕(將用戶發送回索引頁面)時,應該在那裏顯示的圖表只是一個紅色的「x」,就好像圖像不存在一樣。如果我刷新頁面,它應該會顯示。
當時的退出按鈕使用Response.Redirect()將用戶發送回索引頁,我花了一些時間來確認這是正確的方法。最後,我嘗試切換到使用Server.Transfer(),儘管每個站點似乎都表明在頁面執行週期方面兩者之間沒有主要區別 - 只有Response.Redirect()發送了整個新的請求,而Server.Transfer沒有。
儘管如此,使用Server.Transfer()修復了這個問題。那太好了!
任何人都可以解釋爲什麼這工作?
更新 - 一些代碼,以防萬一它有幫助。
來自更新表單的問題之一 - 最初使用的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)
}
很難說,不看代碼。我唯一能猜到的就是Server.Transfer停止執行並立即重定向響應的地方。重定向將完成執行,並可能有一些意外的代碼正在運行,產生問題 – user1231231412 2012-01-06 14:26:17
我會彈出一些代碼,只是爲了興趣,但說實話我不認爲我可以發佈足夠的 - 真正看到發生了什麼我' d需要上傳大約一半的應用程序代碼,並且我不想讓任何人通過閱讀我的許多代碼的折磨:P – Hecksa 2012-01-06 14:37:20
**更新**:添加了代碼。 – Hecksa 2012-01-06 14:49:45