如何在ASP.net MVC站点中查看SSRS报告?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

有没有办法在ASP.net MVC视图上放置SQL Server Reporting Services报表查看器控件?如果不是,那么完成这个的最好方法是什么?

提问于
用户回答回答于

不,不是在MVC视图中。但是你可以有一个网页表单页面,它们中的服务器控件与你的MVC网站混合在一起。

嗯,只是谷歌搜索“混合asp.net mvc和网络形式”找到一些例子,谷歌质疑我是否是人类或不

无论如何,这里有一个链接 - http://www.packtpub.com/article/mixing-asp.net-webforms-and-asp.net-mvc - 这里有几个。我也出于同样的原因在一个MVC站点做了这个 - 报告控制。

用户回答回答于

不,如果将它放置在MVC视图中,ReportViewer控件将不起作用,因为它需要ViewState。必须创建一个老派的Web表单并将ReportViewer放在那里。

我在一个项目中使用的解决方案是创建一个自定义路由处理程序,所以我仍然可以使用URL路由。路由处理程序将从RouteData集合中获取类似报告名称的参数,创建我的Web表单实例,并通过公共属性将参数传递给它。Web表单将在Page_Load中读取这些内容并配置ReportViewer控件。

// Configure a route in Global.asax.cs that is handled by a ReportRouteHandler
routes.Add("ReportRoute", new Route("Reports/{reportName}",
                                    new ReportRouteHandler());

public class ReportRouteHandler : IRouteHandler {
    public IHttpHandler GetHttpHandler(RequestContext requestContext) {
        var reportName = requestContext.RouteData.Values["reportName"] as string;

        var webform = BuildManager
            .CreateInstanceFromVirtualPath("~/Path/To/ReportViewerWebForm.aspx",
                                           typeof(Page)) as ReportViewerWebForm;
        webform.ReportToShow = reportName;
        return webform;
    }
}

当然,如果决定使用这种方法,此代码仅仅是一个起点。我创建的那个在返回之前也做了一些用户验证和参数验证。

看起来如果你使用ASP.NET 4.0,大部分工作都可以自动完成

扫码关注云+社区