Crystal Reports en ASP.NET MVC

Sé que el uso de controles del lado del servidor es un no-no en ASP.NET MVC, sin embargo, tenemos una larga lista de informes de cristal que la compañía ya ha producido para una aplicación anterior que me gustaría utilizar para nuestra nueva ASP. Aplicación NET MVC.

¿Existe una forma adecuada de usar informes de cristal en ASP.NET MVC? ¿Si es así, cómo?

Tuvimos / tenemos una situación similar en el trabajo.

La solución que usamos:

  • Crear un directorio separado para informes
  • Crea páginas ASPX normales para informes

No hemos visto ningún problema (además de los normales Crystal) con esta configuración.

Es bastante simple en realidad. solo agregue las siguientes referencias a su proyecto MVC:

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

usa el método de Acción como a continuación:

  • 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 

Solo agregue esta referencia: usando CrystalDecisions.CrystalReports.Engine;
que hacer esta acción:

 using CrystalDecisions.CrystalReports.Engine; public ActionResult Report() { List table = new List
(); 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"); }