如何在 ASP.NET MVC Web 应用程序中显示 SSRS 报表






4.88/5 (10投票s)
在本文中,我将展示如何在 ASP.NET MVC 应用程序中显示 SSRS 报表。在此演示中,我使用了 Visual Studio 2012、ASP.NET MVC 4 - empty Template、已部署到 SSRS 服务器的现有 SSRS 报表以及一个 nuGet 包。
引言
在本文中,我将展示如何在 ASP.NET MVC 应用程序中显示 SSRS 报表。此演示使用了 Visual Studio 2012、ASP.NET MVC 4 - empty Template、已部署到 SSRS 服务器的现有 SSRS 报表以及一个 nuGet 包。本文面向有 ASP.NET MVC Web 应用程序开发经验并对 SSRS 有一定了解的开发人员。
背景
正如许多人可能已经知道的,将 SSRS 报表合并到 ASP.NET Web 应用程序中很容易,因为 ASP.NET 中有一个名为“ReportViewer”的服务器控件。但是,将 SSRS 报表集成到 ASP.NET MVC Web 应用程序中则稍微复杂一些。在本文中,我将展示如何轻松地在几个步骤中进行集成。我将使用一个名为 ReportViewer for MVC 的 nuGet 包。ReportViewerForMVc
ReportViewer for MVC 是一个 .NET 项目,它使得可以在 MVC Web 应用程序中使用 ASP.NET ReportViewer 控件。它提供了一组 HTML Helper 和一个简单的 ASP.NET Web Form,用于在自动调整大小的 iframe 标签中显示 ReportViewer。参考:有关“ReportViewer for MVC”项目和实际源代码的更多信息,请访问 Codeplex 上的 wiki 页面 Codeplex
入门
要将 SSRS 报表集成到 ASP.NET MVC Web 应用程序中,您需要准备一些与 SSRS 服务器相关的信息。您需要以下详细信息:
- SSRS 服务器 URL
- SSRS 文件夹路径
- 报表名称 - 演示中的报表名称为 Performance.rdl
我创建了一个具有 2 个视图的演示 ASP.NET MVC Web 应用程序。
- Home/Index 视图 - 显示报表列表,单击报表链接将导航到 Reports 模板以显示报表。
- Report/ReportTemplate 视图 - 显示请求的报表。
ASPNETMVC_SSRS_Demo 项目的结构如下。您可以看到,在解决方案资源管理器中,Controllers 文件夹下有 HomeController 和 ReportController,View 文件夹下有 Home 文件夹(包含 Index 视图)和 Report 文件夹(包含 ReportTemplate 视图)。
下一步是安装 nuGet 中的报告包 - ReportViewer for MVC。这是最重要的一步。您可以通过以下任一方式安装任何 nuGet 包。
- 使用程序包管理器控制台
或者
- 通过右键单击解决方案资源管理器中的项目并选择“管理解决方案的 NuGet 程序包”选项,我将向您展示使用程序包管理器控制台安装 ReportViewerForMvc 的步骤。
使用程序包管理器控制台
单击“工具”->“NuGet 程序包管理器”。
程序包管理器控制台将打开。
接下来,在提示符 PM> Install-package ReportViewerForMvc 下键入以下命令,然后按 Enter。几分钟后,程序包将安装完成。
此安装将在项目中添加:2 个程序集(Microsoft.ReportViewer.WebForms & ReportViewerForMvc)到引用,一个 .aspx 页面(ReportViewerWebForm.aspx)以及 web.config 文件中的 httphandlers 设置。
注意:添加的 aspx 页面没有 .cs 文件。
您现在可以使用此 aspx 页面并在控制器中编写所有代码,但我使用一种略有不同的路径以实现代码重用性和一致性。
向项目中添加一个名为“Reports”的新文件夹,然后向 Reports 文件夹添加一个名为 ReportTemplate.aspx 的新 WebForm (.aspx 页面)。
将 ReportViewerWebForm.aspx 的内容(如图所示)复制并替换 ReportTemplate.aspx 的内容。注意:请勿复制 @page 指令,仅复制突出显示的部分。
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> //<%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%> <!doctype html> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="scriptManagerReport" runat="server"> </asp:ScriptManager> <rsweb:ReportViewer runat ="server" ShowPrintButton="false" Width="99.9%" Height="100%" AsyncRendering="true" ZoomMode="Percent" KeepSessionAlive="true" id="rvSiteMapping" SizeToReportContent="false" > </rsweb:ReportViewer> </div> </form> </body> </html>
ReportTemplate.aspx 将更改为这样。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportTemplate.aspx.cs" Inherits="ASPNETMVC_SSRS_Demo.Reports.ReportTemplate" %> <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> <%--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">--%> <!doctype html> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE11"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:ScriptManager ID="scriptManagerReport" runat="server"> <Scripts> <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" /> </Scripts> </asp:ScriptManager> <rsweb:ReportViewer runat ="server" ShowPrintButton="false" Width="99.9%" Height="100%" AsyncRendering="true" ZoomMode="Percent" KeepSessionAlive="true" id="rvSiteMapping" SizeToReportContent="false" > </rsweb:ReportViewer> </div> </form> </body> </html>
接下来,从 ReportTemplate.aspx 页面中删除以下脚本标签。
<Scripts> <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" /> </Scripts>
向 ReportViewerControl 添加其他属性,如下所示。
<rsweb:ReportViewer id="rvSiteMapping" runat ="server" ShowPrintButton="false" Width="99.9%" Height="100%" AsyncRendering="true" ZoomMode="Percent" KeepSessionAlive="true" SizeToReportContent="false" ></rsweb:ReportViewer>
现在打开 ReportTemplate.aspx.cs 文件,并将以下代码添加到 Page_load 事件中,您需要将 SSRS 服务器 URL 和 SSRS 报表文件夹路径填入。
using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace ASPNETMVC_SSRS_Demo.Reports { public partial class ReportTemplate : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { try { String reportFolder = System.Configuration.ConfigurationManager.AppSettings["SSRSReportsFolder"].ToString(); rvSiteMapping.Height = Unit.Pixel(Convert.ToInt32(Request["Height"]) - 58); rvSiteMapping.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote; rvSiteMapping.ServerReport.ReportServerUrl = new Uri("SSRS URL"); // Add the Reporting Server URL rvSiteMapping.ServerReport.ReportPath = String.Format("/{0}/{1}", reportFolder, Request["ReportName"].ToString()); rvSiteMapping.ServerReport.Refresh(); } catch (Exception ex) { } } } } }
将 SSRSReportFolder 路径添加到 web.config 文件中的应用程序设置。
<add key="SSRSReportsFolder" value="BIC_Reports"/>
接下来,在 Models 文件夹下创建一个实体类 ReportInfo.cs。
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ASPNETMVC_SSRS_Demo.Models { public class ReportInfo { public int ReportId { get; set; } public string ReportName { get; set; } public string ReportDescription { get; set; } public string ReportURL { get; set; } public int Width { get; set; } public int Height { get; set; } public string ReportSummary { get; set; } } }
接下来,我们将向 Controller 和 View Pages 添加代码。HomeController.cs 没有变化。向 Home/Index 视图页面添加以下代码。
@{ ViewBag.Title = "Index"; } <h2>Reports List</h2> <a id="ReportUrl_Performance" href="@Url.Action("ReportTemplate", "Report", new { ReportName = "Performance", ReportDescription = "Performance Report", Width = 100, Height = 650 })"> Performance Report</a>
接下来,向 Report Controller 添加 ActionResult ReportTemplate。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using ASPNETMVC_SSRS_Demo.Models; namespace ASPNETMVC_SSRS_Demo.Controllers { public class ReportController : Controller { // // GET: /Report/ public ActionResult ReportTemplate(string ReportName, string ReportDescription, int Width, int Height) { var rptInfo = new ReportInfo { ReportName = ReportName, ReportDescription = ReportDescription, ReportURL = String.Format("../../Reports/ReportTemplate.aspx?ReportName={0}&Height={1}", ReportName, Height), Width = Width, Height = Height }; return View(rptInfo); } } }
最后一步是打开 Report 下的 ReportTemplate 视图页面,并添加以下代码。
@model ASPNETMVC_SSRS_Demo.Models.ReportInfo <H1> @Model.ReportDescription </H1> <iframe id="frmReport" src="@Model.ReportURL" frameborder="0" style="@String.Format("width:{0}%; height: {1}px;", Model.Width, Model.Height)" scrolling="no"> </iframe>
按 F6 生成应用程序,然后按 F5 运行应用程序。它将显示 Home / index 页面。
单击 Performance Report 链接,您将看到 SSRS 报表已显示。
希望您喜欢这篇文章,请随时添加评论并分享您的反馈。
这篇文章发布在我的网站 Hussain Patel 上。
参考文献
有关更多信息,请参阅 codeplex 上的 wiki 页面 Codeplex
您也可以阅读更多关于 ReportViewer for Mvc 的信息 ReportViewerForMVc