ASP.NET MVC中的Crystal Reports

我知道服务器端控件的使用在ASP.NET MVC中是不允许的,但是我们有一长串水晶报表,公司已经为之前的应用程序生成了一个我想用于新ASP的水晶报表。 NET MVC应用程序。

在ASP.NET MVC中使用水晶报表是否有适当的方法? 如果是这样,怎么样?

我们在工作上有类似的情况。

我们使用的解决scheme:

  • 为报告创build一个单独的目录
  • 为报告创build正常的ASPX页面

我们还没有看到任何问题(除了正常的水晶之外)与此设置。

实际上这很简单。 只需添加以下对您的MVC项目的引用:

  • CrystalDecisions.CrystalReports.Engine
  • CrystalDecisions.ReportSource
  • CrystalDecisions.Shared

使用Action方法如下:

  • C# :

    using CrystalDecisions.CrystalReports.Engine; public ActionResult Report() { ReportClass rptH = new ReportClass(); rptH.FileName = Server.MapPath("[reportName].rpt"); rptH.Load(); rptH.SetDataSource([datatable]); Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); return File(stream, "application/pdf"); } 
  • VB.NET:

      Imports CrystalDecisions.CrystalReports.Engine Public Function Report() As ActionResult Dim rptH As New ReportClass() rptH.FileName = Server.MapPath("[reportName].rpt") rptH.Load() rptH.SetDataSource([datatable]) Dim stream As IO.Stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat) Return File(stream, "application/pdf") End Function 

只需添加这个参考:使用CrystalDecisions.CrystalReports.Engine;
比做这个动作:

 using CrystalDecisions.CrystalReports.Engine; public ActionResult Report() { List<Table> table = new List<Table>(); ReportDocument rd = new ReportDocument(); rd.Load(Path.Combine(Server.MapPath("~/Repport/CrystalReport1.rpt"))); Response.Buffer = false; Response.ClearContent(); Response.ClearHeaders(); Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); stream.Seek(0, SeekOrigin.Begin); return File(stream, "application/pdf", "Suivie Historique.pdf"); }