我目前正在为一家公司设计一个基于 Web 的 (asp.net/C#) 体积跟踪工具,用于报告和呈现体积数据。用户呈现数据的一种方法是使用使用 asp.net 内置图表的图表工具。用户可以设置许多不同的过滤选项来适当地自定义他的图表,然后将其呈现在同一页面上。关于图表的内容,一切都很好,但是我创建了一些控件,让用户可以生成更高质量的图表图像并在单独的窗口中显示它们。使用 Response.Redirect 的扩展方法,我将用户重定向到一个包含高分辨率版本的图表图像的新窗口,如下所示:
private void DownloadImage(int width, int height)
{
double scale = width / ViewGraphChart.Width.Value;
// Resize chart:
ViewGraphChart.Width = width;
ViewGraphChart.Height = height;
// Resize titles:
foreach (Title t in ViewGraphChart.Titles)
{
t.Font = new Font(t.Font.FontFamily, (float)(t.Font.Size * scale), FontStyle.Regular);
}
// Resize legends:
foreach (Legend l in ViewGraphChart.Legends)
{
l.Font = new Font(l.Font.FontFamily, (float)(l.Font.Size * scale), FontStyle.Regular);
}
UpdateChart();
// Open image in new window:
Response.Redirect(ViewGraphChart.CurrentImageLocation, "_blank", "");
}
到目前为止一切顺利,打开了一个新窗口,用户收到了他的图表图像的高分辨率版本。然而,问题是工具中的图表自然也被修改了,并且显然变得太大而无法正确放入布局中。我试图通过在重定向后立即重置图表属性来解决此问题,但这使得“高清”图表图像在工具内显示为相同的小图表图像。所以,我认为最好的方法是制作图表的副本,修改副本并将其交给用户,而原始图像在工具中保持其小尺寸。考虑到我有大量的数据绑定和其他连接到我的图表的东西,有什么简单的方法可以做到这一点,还是有其他方法可以解决?
我有点着急,所以如果这不太清楚,请告诉我,我会更彻底地解释。
问候, 安特
编辑:
Response.Redirect 扩展方法背后的代码。如果我没记错的话,从这一页借来的。
public static void Redirect(this HttpResponse response, string url, string target, string windowFeatures)
{
if
((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase))
&& String.IsNullOrEmpty(windowFeatures))
{
response.Redirect(url);
}
else
{
Page page = (Page)HttpContext.Current.Handler;
url = page.ResolveClientUrl(url); string script;
if (!String.IsNullOrEmpty(windowFeatures))
{
script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
}
else
{
script = @"window.open(""{0}"", ""{1}"");";
}
script = String.Format(script, url, target, windowFeatures);
ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true);
}
}