2011-08-09 32 views
1

假設我有像控制器的動作:渲染來自其他的ActionResult的FileStream在ASP.net MVC

public class ChartController 
{ 
    public ActionResult RenderChart(string chartType) 
    {  
     ... 
     return File(imgStream, "image/png"); 
    } 
} 

我怎樣才能呈現來自不同的動作這個動作像

public ActionResult MakePDF() 
{ 
    byte [] image = ReadStream("Chart/RenderChart?chartType=LineChart"); 
    ... 
} 
+0

爲什麼你不會在RenderChart動作中做同樣的邏輯來獲得MakePDF動作中的'imgStream'? – amurra

+1

我想使chartController功能更多,可以在其他類中使用。 – Seen

回答

0

移動將給定chartTypeimgStream變爲兩個操作可以調用的通用服務的邏輯。

public class ChartService 
{ 
    public Stream GetChartImageStream(string chartType) 
    { 
     Stream imgStream; 
     //assign a value to imgStream 
     return imgStream; 
    } 
} 

如果行動是在同一個控制器,可以通過直接調用RenderChart方法作弊。我仍然建議將邏輯轉移到通用的服務方法中。

public ActionResult MakePDF() 
{ 
    FileStreamResult renderChartResult = (FileStreamResult)RenderChart("LineChart"); 
    Stream imgStream = renderChartResult.FileStream; 
} 
+0

我認爲這是一個好方法。謝謝。我只是想知道是否會有一些基於控制器而不是服務的解決方案。 – Seen