随着MVC模式的广泛运用,对Web应用系统的开发带来了巨大的影响,我们好像又回到了原来的ASP时代,视乎这是一种后退而不是一种进步,不过MVC模式给我们带来的影响不仅限于我们所看到的这一点.。MVC看上去是使用原来的HTML页面来呈现内容,但其核心是 .NET路由引擎,通过.NET路由引擎使得MVC设计模式更容易被理解,更方便开发人员所使用,而且不必担心视图状态以及页面的生命周期。
ActiveReports最初是为传统的 .NET Web Forms 系统所设计,但也可用于MVC模式的系统中。下面就来谈一谈ActiveReports 6.0如何用于MVC模式的系统中。

1、创建一个MVC 3 工程,并添加ActiveReports 6.0到工程中

2、在工程中添加一个Controller,然后在Controller中添加一个Action方法。我们将报表对象存放在ViewData对象中,通过ViewData将报表从Controller传递到View中。

 
public class HomeController : Controller
    {
        public ActionResult Report()
        {
            ViewData["Report"] = new _rpt;
            return View();
        }
    }
复制代码

3、通过Actiion方法创建一个View Page,并添加ActiveReports的WebViewer到View Page中:

 
<ActiveReportsWeb:WebViewer ID="WebViewer1" runat="server" height="559px"
    width="100%" onload="WebViewer1_Load" ViewerType="AcrobatReader">
</ActiveReportsWeb:WebViewer>
复制代码

4、 MVC中的View Page并不支持 .cs 的后台代码文件,这一点是和MVC设计理念相符的。然而,我们需要从ViewData中得到Controller中传过来的报表对象,并将报表对象设置给 WebViewer,这些逻辑需要在WebViewer的Load事件中完成:

 
<script runat="server">  
    protected void WebViewer1_Load(object sender, EventArgs e)
    {
        WebViewer1.Report = (DataDynamics.ActiveReports.ActiveReport)ViewData["Report"];
    }
</script>
复制代码

5、当 WebViewer的ViewType设置为AcrobatReader时,我们需要设置相应的Http Handlers,为了路由引擎不处理这些Http请求,并保持Http请求的默认行为,我们需要对IgnoreRoute进行相应的设置,修改 Global.asax中的RegisterRoutes方法:

 
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{*allarcachitems}", new { allarcachitems = @".*\.ArCacheItem(/.*)?" });
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );
}
复制代码

6、在Web.config中添加以下Http Handlers 的配置信息

 
<add verb="*" path="*.rpx" type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler, ActiveReports.Web, Version=x.x.xxxx.x, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>
    
<add verb="*" path="*.ActiveReport" type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler, ActiveReports.Web, Version= x.x.xxxx.x, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>
    
<add verb="*" path="*.ArCacheItem" type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler, ActiveReports.Web, Version= x.x.xxxx.x, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>
复制代码

7、运行程序可以查看报表


ActiveReportsMvcApplication.zip (3.27 M, 下载次数:45)