1

我目前正在为一家公司设计一个基于 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);
        } 
    } 
4

0 回答 0