我正在尝试使用带有本地报告的Asp.net MVC网站进行SSRS报告。
我尝试了所提到的所有内容in this post,但我继续使用以下消息获取隐藏的div:
报表查看器Web控件HTTP处理程序尚未在应用程序的web.config文件中注册。添加到web.config文件的system.web / httpHandlers部分,或添加到Internet Information Services 7或更高版本的system.webServer / handlers部分。
处理程序正确添加到Web配置中,如果我直接导航到aspx页面,报告将会起作用(但是由于查看引擎不涉及我不能使用任何剃刀助手,这个问题只发生在我的时候使用路由。
我有RouteExistingFiles = false
并忽略了以下路线:
{resource}.axd/{*pathInfo}; {resource}.aspx/{*pathInfo}; {resource}.ascx/{*pathInfo};
并通过从webconfig中删除BlockViewHandler
来禁用它。
我正在使用Microsoft.ReportViewer for visual studio 2012(版本11.0.0.0)
修改 来自Scot Hanselman的this post关于在ASPX母版页上使用剃刀视图,我正在做反向,使用带有Razor布局的aspx用户控件,但是这个Microsoft报表查看器不适用于这种方法。
答案 0 :(得分:1)
由于你的意见,我找到了原因,因为它不起作用。
我有一个使用报表查看器的User控件,以及一个使用该用户控件显示报表的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文档)。但是,无论您选择哪种格式,它都会缺少报表查看器的交互性。