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"); }
- MVC 3布局页面,剃刀模板和DropdownList
- 有什么好理由使用FormCollection而不是ViewModel?
- MVC Razor HTML助手语法:Html.Hidden对象参数中的Viewbag
- 如何解决:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的模块“ManagedPipelineHandler”
- 在Asp.Net MVC中设置“主页”
- Html.ActionLink作为一个button或图像,而不是一个链接
- MVC 3:使用HtmlHelpers有条件地添加已禁用的属性
- Mvc Jquery Ajax Post返回null
- URL中的URL编码斜线