2016-02-18 5 views
2

У меня есть страница, на которой отображается сгенерированная диаграмма MS в соответствии с выбранными параметрами.C# - изображение MS Charts становится пустым после сохранения

Раньше, когда я делал это на своем локальном компьютере, я мог сохранить изображение диаграммы и отобразить его на листе Excel через ExcelDl_Click. Но после развертывания системы в IIS сохраненное изображение «диаграммы», которое я получаю, представляет собой пустое квадратное изображение.

Вот код, который используется как на местном, так и в развертывании:

protected void ExcelDl_Click(object sender, EventArgs e) 
    { 
     Response.Clear(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", "attachment;filename=ViewHistoryChart.xls"); 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.Charset = ""; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     Chart1.RenderControl(hw); 

     string tmpChartName = "ChartImage.jpg"; 
     string imgPath = HttpContext.Current.Request.PhysicalApplicationPath + tmpChartName; 
     Chart1.SaveImage(imgPath); 

     string src = tmpChartName; 
     string img = string.Format("<img src = '{0}{1}' />", HttpContext.Current.Request.PhysicalApplicationPath, src); 

     Table table = new Table(); 
     TableRow row = new TableRow(); 
     Unit width = new Unit(500, UnitType.Pixel); 
     row.Cells.Add(new TableCell()); 
     row.Cells[0].Width = width; 
     row.Cells[0].Controls.Add(new Label { Text = ChartTitle.Text, ForeColor=Color.Red, }); 
     table.Rows.Add(row); 
     row = new TableRow(); 
     row.Cells.Add(new TableCell()); 
     row.Cells[0].Controls.Add(new Literal { Text = lblSectionFunctionSelected.Text }); 
     table.Rows.Add(row); 
     row = new TableRow(); 
     row.Cells.Add(new TableCell()); 
     row.Cells[0].Controls.Add(new Literal { Text = img }); 
     table.Rows.Add(row); 
     row.Cells.Add(new TableCell()); 
     row.Cells[0].Controls.Add(new Literal { Text = lbllegendHistory.Text }); 
     table.Rows.Add(row); 

     sw = new StringWriter(); 
     hw = new HtmlTextWriter(sw); 
     table.RenderControl(hw); 
     Response.Write(sw.ToString()); 
     Response.Flush(); 
     Response.End(); 
    } 

Когда я нажимаю на изображении ссылку ChartImg.axd на странице, на графике отображается правильно. Но после того, как я нажму на ExcelDl_Click, ссылка не будет отображаться после его повторного открытия. У меня такое чувство, что оно имеет какое-то отношение к тому, как я сохраняю изображение, но я не уверен. Есть ли какие-либо обновления пакета, необходимые для решения этой проблемы? Любая помощь будет оценена.

ответ

0

Причина, по которой у вас возникла эта проблема, заключается в том, что веб-приложение не может сохранить локальную файловую систему сервера. Поэтому, когда вы делаете Chart1.SaveImage(imgPath);, он фактически не сохраняет. Если вы собираетесь придерживаться этого шаблона, пользователю пула приложений понадобятся права на запись в эту папку.

+0

Хорошо, я попытался сделать это, и он по-прежнему сохраняется как одно и то же изображение белого квадрата. Я даже пытался предоставить полный доступ к AppPool. Ваш ответ кажется, что существует другая альтернатива? Что еще я могу сделать? – mhfour