0

我正在尝试将 SSRS 报告与带有本地报告的 Asp.net MVC 网站一起使用。

我尝试了这篇文章中提到的所有内容,但我不断收到一个隐藏的 div,并显示以下消息:

报告查看器 Web 控制 HTTP 处理程序尚未在应用程序的 web.config 文件中注册。添加到 web.config 文件的 system.web/httpHandlers 部分,或添加到 Internet Information Services 7 或更高版本的 system.webServer/handlers 部分。

如果我直接导​​航到 aspx 页面(通过 ,但由于不涉及视图引擎,我不能使用任何剃须刀助手,则此问题仅在我使用路由时才会出现,因此处理程序已正确添加到 Web 配置和报告将起作用。

我已经RouteExistingFiles = false忽略了以下路线:

{resource}.axd/{*pathInfo};
{resource}.aspx/{*pathInfo};
{resource}.ascx/{*pathInfo};

BlockViewHandler通过从 webconfig 中删除它来禁用它。

我正在为 Visual Studio 2012 使用 Microsoft.ReportViewer(版本 11.0.0.0)

编辑Scot Hanselman 的这篇文章 是关于在 ASPX 母版页中使用 razor 视图,我正在做完全相反的事情,使用带有 Razor 布局的 aspx 用户控件,但是这个 Microsoft 报告查看器不适用于这种方法。

4

1 回答 1

1

由于您的评论,我找到了原因,因为它不起作用。

我有一个使用报表查看器的用户控件,以及一个使用该用户控件显示报表的 aspx 页面。如果我直接导​​航到报告,例如:myhost/Views/Shared/ReportViewer.aspx 它可以工作,如果我使用路由,例如:myhost/report/myreport 它不会工作

当您直接导航到该页面时,它由“传统”Web 表单基础结构呈现,因此报表查看器所需的所有元素(视图状态、脚本管理器和儿子)都可用,并且报表查看器工作正常。

当您使用路由导航时,请形成注释:

是的,创建一个路由,使报表查看器由 MVC 控制器处理,该控制器返回一个剃刀视图,该视图使用 Html.RenderPartial("ReportControl") 呈现报表用户控件

在这种情况下,您将呈现一个传统的 Web 表单,就好像它是一个剃须刀页面。执行此操作时,报表查看器控件所需的所有基础结构都将丢失(尤其是视图状态),因此它不起作用。

因此,您需要将报表查看器页面显示为传统的 Web 表单。您可以使用 javascript 在新窗口/标签中打开它。如果您仍想将其集成到现有的 MVC 页面中,唯一的解决方案是使用<iframe>并在其中呈现报表。

将其直接集成到 MVC 页面的另一种解决方案是使用 Reporting Services Web 服务呈现报表,并将输出发送到浏览器(例如,作为 .jpg 图像或 PDF 文档)。但是,无论您选择哪种格式,它都将缺乏报表查看器的交互性。

于 2014-01-27T16:01:29.523 回答