Моя проблема связана с попыткой включить отчет SSRS (SQL Server) в мое приложение MVC.
Я остановился на гибридном решении, состоящем в том, чтобы использовать WebForm с элементом управления ReportViewer, а затем на страницах моего MVC View, в которых iframe ссылаются на эту страницу WebForm.Сложность в том, что iframe нужно динамически заполнять отчетом, а не использовать src из-за публикации параметров в WebForm.
Он отлично работает в Firefox и Chrome, однако IE выдает «Sys is Undefined»ошибка javascript.
Использование src в iframe работает в IE, но я не могу найти способ публикации параметров (не хочу использовать что-то вроде /Report.aspx?param1=test из-за возможногодлина).
Это проект ASP.NET MVC 2, .NET 4, Visual Studio 2010 в Windows 7 x74, если это поможет.
Так вот код (я мог бы предоставитьФайлы проекта VS2010, если они кому-то нужны)
В моей веб-форме:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Report.aspx.cs" Inherits="SSRSMVC.Views.Home.Report" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
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">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form id="RSForm" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server" EnablePartialRendering="true" ScriptMode="Release">
</asp:ScriptManager>
<asp:UpdatePanel ID="ReportViewerUP" runat="server">
<ContentTemplate>
<rsweb:ReportViewer ID="ReportViewer" runat="server" Width="100%" Height="380px" ProcessingMode="Local"
InteractivityPostBackMode="AlwaysAsynchronous" AsyncRendering="true">
<LocalReport ReportPath="Models\\TestReport.rdlc">
</LocalReport>
</rsweb:ReportViewer>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
И Codebehind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.Reporting.WebForms;
namespace SSRSMVC.Views.Home
{
public partial class Report : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string test = Request.Params["val1"];
ReportViewer.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", new SSRSMVC.Models.DataProvider().GetData()));
}
}
}
}
И, наконец, моя страница просмотра,
<script type="text/javascript">
$(window).load(function () {
$.post('/Report.aspx', { val1: "Hello World" }, function (data) {
var rv_frame = document.getElementById('Frame1');
rv_frame = (rv_frame.contentWindow) ? rv_frame.contentWindow : (rv_frame.contentDocument.document) ? rv_frame.contentDocument.document : rv_frame.contentDocument;
rv_frame.document.open();
rv_frame.document.write(data);
rv_frame.document.close();
});
});
</script>