【发布时间】:2012-01-06 14:22:27
【问题描述】:
我最近一直在开发一个小型应用程序,它由一个索引页面组成,其中包含一些从数据库运行的报告,然后是一些用于更新该页面内容的表单,所有这些都在 ASP.NET 中使用 C#学习如何在未来使用 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);
}
Report 类的大纲 - 这基本上是我在 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 停止执行并立即重定向 response.redirect 将完成执行的位置,并且可能正在运行一些导致问题的意外代码
-
我会弹出一些代码只是为了感兴趣,但老实说我认为我不能发布足够多的内容 - 要真正了解发生了什么,我需要上传大约一半的应用程序代码,而且我真的不想让任何人经历阅读我那么多代码的折磨:P