Je sais que l'utilisation des contrôles côté serveur est un non-non dans ASP.NET MVC, mais nous avons une longue liste de rapports Crystal que la société a déjà produits pour une application précédente que j'aimerais utiliser pour notre nouvel ASP. Application NET MVC.
Existe-t-il un moyen approprié d'utiliser les rapports Crystal dans ASP.NET MVC? Si c'est le cas, comment?
Nous avons eu/avons une situation similaire au travail.
La solution que nous utilisons:
Nous n'avons vu aucun problème (à part ceux de Crystal normaux) avec cette configuration.
C'est assez simple en fait. ajoutez simplement les références suivantes à votre projet MVC:
utilisez la méthode Action comme ci-dessous:
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
Ajoutez simplement cette référence: using CrystalDecisions.CrystalReports.Engine;
que de faire cette action:
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");
}