我见过很多人说要使用iframe或一个新的页面来显示ReportViewer控件。 有没有显示我的页面的其余部分的控制内联而不使用iframe的方法吗?
Answer 1:
您可以使用.ascx
如果他们继承的用户控件用剃刀为局部视图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>
在代码隐藏,确保包括在以下Page_Init
; 否则,你将无法在报表视图中使用任何选项:
protected void Page_Init(object sender, EventArgs e)
{
// Required for report events to be handled properly.
Context.Handler = Page;
}
你也想确保你的控制继承自System.Web.Mvc.ViewUserControl
:
public partial class ReportViewerControl : ViewUserControl
要使用此控件,你会做这样的事情在你的剃须刀页:
@Html.Partial("ReportViewerControl", Model)
然后,您可以设置您在的ReportViewer Page_Load
控制像往常一样的。 您将有机会获得一个object
命名Model
,它可以转换为您在发送,然后使用模型的类型:
ReportViewParameters model = (ReportViewParameters)Model;
文章来源: How can I use a ReportViewer control with Razor?