如何使用Razor的ReportViewer控件?

zim*_*nen 5 asp.net-mvc reporting-services razor asp.net-mvc-4

我见过很多人说使用iframe或新页面来显示ReportViewer控件.有没有办法在不使用iframe的情况下与我的页面的其余部分一起显示控件?

zim*_*nen 8

如果.ascx用户控件继承,则可以将用户控件用作Razor的部分视图System.Web.Mvc.ViewUserControl.

在这种情况下,您可以创建一个ASCX包含您的ReportViewer控制和必要的ScriptManager您的View\Controller文件夹:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ReportViewerControl.ascx.cs" Inherits="MyApp.Views.Reports.ReportViewerControl" %>
<%@ Register TagPrefix="rsweb" Namespace="Microsoft.Reporting.WebForms" Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" %>

<form id="form1" runat="server">
<div>
    <asp:ScriptManager ID="scriptManager" runat="server" EnablePartialRendering="false" />
    <rsweb:ReportViewer Width="100%" Height="100%" ID="reportViewer" runat="server" AsyncRendering="false" ProcessingMode="Remote"> 
        <ServerReport />
    </rsweb:ReportViewer> 
</div>
</form>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中,请确保在以下内容中包含以下内容Page_Init:否则,您将无法在报告视图中使用任何选项:

protected void Page_Init(object sender, EventArgs e)
{
    // Required for report events to be handled properly.
    Context.Handler = Page;
}
Run Code Online (Sandbox Code Playgroud)

您还需要确保您的控件继承自System.Web.Mvc.ViewUserControl:

public partial class ReportViewerControl : ViewUserControl
Run Code Online (Sandbox Code Playgroud)

要使用此控件,您可以在Razor页面中执行以下操作:

@Html.Partial("ReportViewerControl", Model)
Run Code Online (Sandbox Code Playgroud)

然后,您可以Page_Load像往常一样在控件中设置ReportViewer .您可以访问object命名Model,您可以将其转换为您发送的模型类型,然后使用:

ReportViewParameters model = (ReportViewParameters)Model;
Run Code Online (Sandbox Code Playgroud)