随着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、运行程序可以查看报表

源码下载:在ASP.NET MVC 中使用ActiveReports报表控件

同时,安装ActiveReports产品之后,在这个目录可以找到源代码,C:\Users\用户名\Documents\ComponentOne Samples\ActiveReports Developer 7\Professional\C#

相关阅读:

【推荐】中铁、中石油等大型企业的复杂报表解决方案

ActiveReports11 SP1 新特性

ActiveReports11 新特性

在ASP.NET MVC 中使用ActiveReports报表控件的更多相关文章

  1. ActiveReports 报表控件官方中文入门教程 (1)-安装、激活以及产品资源

    本系列文章主要是面向初次接触 ActiveReports 产品的用户,可以帮助您在三天之内轻松的掌握ActiveReports控件的基本使用方法,包括安装.激活.创建报表.绑定数据源以及发布等内容.本 ...

  2. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布

    本篇文章将阐述首次使用 ActiveReports 报表控件 的方法,包括添加报表文件.绑定数据源以及如何发布报表等内容. ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及 ...

  3. ActiveReports 报表控件V12新特性 -- 无需ETL处理,即可实现跨数据源分析数据

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  4. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源

     本系列文章主要是面向初次接触 ActiveReports 产品的用户,能够帮助您在三天之内轻松的掌握ActiveReports控件的基本用法,包含安装.激活.创建报表.绑定数据源以及公布等内容. ...

  5. ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

    本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 ...

  6. ActiveReports报表控件V11 SP1版本正式发布!

    无需编码,即可轻松搞定商业报表六大需求的 ActiveReports 报表控件,于今日宣布正式发布 V11 SP1 版本,并在其 官方网站 提供免费下载. V11 版本是 ActiveReports ...

  7. ActiveReports 报表控件V12新特性 -- RPX报表转换为RDL报表

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  8. ActiveReports 报表控件V12新特性 -- 新增矩表的RepeatToFill属性

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

  9. ActiveReports 报表控件V12新特性 -- 文本框和标签控件的浓缩

    ActiveReports是一款专注于 .NET 平台的报表控件,全面满足 HTML5 / WinForms / ASP.NET / ASP.NET MVC / WPF 等平台下报表设计和开发工作需求 ...

随机推荐

  1. (转)Db2 数据库性能优化中,十个共性问题及难点的处理经验

    (转)https://mp.weixin.qq.com/s?__biz=MjM5NTk0MTM1Mw==&mid=2650629396&idx=1&sn=3ec17927b3d ...

  2. nginx lua集成

    版本说明: linux: 1.8.1 luajit:2.0.2(不要使用标准lua,应当使用luajit, 后者的效率比前者高很多) ngx_devel_kit: 0.2.18 lua-nginx-m ...

  3. 全网最详细的再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法(图文详解)

    不多说,直接上干货! java.io.IOException: Incompatible clusterIDs in /opt/modules/hadoop-2.6.0/data/tmp/dfs/da ...

  4. spring boot 与 filter

    spring boot 里面用拦截器好像比用过滤器多一些. 在过滤器中, 并不能获取到action的相关信息, 会造成很多的麻烦和功能欠缺. 那, 这里就用过滤器做一个小栗子, 实际使用过程中, 不会 ...

  5. Solidity的自定义结构体深入详解

    一.结构体定义 结构体,Solidity中的自定义类型.我们可以使用Solidity的关键字struct来进行自定义.结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型.数组 ...

  6. mysql dbcp Caused By: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy ...

  7. SQL Server 笔记

    第一章数据库的基本操作: >创建数据库: create database my_db(逻辑名称) on primary ( name='my_db.mdf',(物理名称) filename='F ...

  8. Json格式循环遍历,Json数组循环遍历

    Json格式数据如何遍历,这里我们可以用for..in实现 例如最简单的json格式 , 'handsome' : 'yes' }; for( var key in json1 ){ console. ...

  9. GCD之Group

    1.问题的提出 在上面的GCD之全局.主线程中介绍了dispatch_get_global_queue.dispatch_get_main_queue的用法,可以看到最后执行的时间在10s 左右,在上 ...

  10. Net Core 中间件实现修改Action的接收参数及返回值

    新一个WebApi项目(Net Core 2.1) 新建InputOutputAlterMiddleware类,修改命名空间为Microsoft.AspNetCore.Builder(不修改也没关系, ...