我目前正在为一家公司设计一个基于网络的(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", "");
}
到目前为止,一个新的窗口打开了,用户手中的图表图像的高分辨率版本。然而问题是,工具中的图表自然也会被修改,显然变得太大而无法正确地适应布局。我试图通过在重定向后立即重置图表属性来解决这个问题,但这使得“HD”图表图像显示为工具内的同一个小图表图像。因此,我认为最好的方法是制作图表的副本,修改副本并将其交给用户,而原始图像在工具中保持小尺寸。有没有简单的方法可以做到这一点,考虑到我有大量的数据绑定和其他东西连接到我的图表,还是有其他方法可以去做?
我有点匆忙所以如果这个问题不太清楚,请告诉我,我会更彻底地解释。
此致 安特
修改
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);
}
}