Grid++Report的几点总结
一.同事解决方案:
1.在View文件夹下建立报表文件A,用来作为报表呈现的载体。这个页面负责加载报表模板与加载数据源。其中报表模板由于后缀名为grf,在MVC中不做任何修改的情况下,系统会做路由处理,提示404错误,因此,同事将模板后缀名修改为jpg,得以顺利调用。数据源加载,同事的思路是通过aspx页面实现,具体来说,在aspx页面中定义ViewData,在controller中对ViewData进行赋值,从而输出view。总体上是利用了aspx页面作为数据源呈现页面,而利用Mvc的controller向这个呈现页面填充数据实现为报表提供数据源。问同事为何不用cshtml页面,答曰:会出错。
二.优化方案:
首先将aspx页面替换为cshtml页面,也在其中定义ViewData,发现点击报表页面的查询按钮,页面即报错,IE崩溃。经过与原有页面数据对比,发现原来是MVC将双引号进行了转义所致。因此,调用MVC自带的Html.Raw方法,阻止其转义。由此,将aspx页面问题解决。
利用cshtml页面,有两种做法:
1.直接在cshtml页面定义ViewData,在controller中返回View,但是此时返回的页面是带有母版页的页面,因此,必须在cshtml页面中声明,Layout=null。
2.在cshtml页面中仅仅定义ViewData,不涉及Layout声明。在Controller中直接返回PartialView即可。
关于模板文件的后缀名修改问题,更是简单,在config中,将*.grf文件声明为静态文件即可。即添加以下代码即可解决。
<add name="Static Report" path="*.grf" verb="GET" type="System.Web.StaticFileHandler" />
至此,将报表部分的开发顺畅了许多,再也不用烦修改报表模板文件后缀名、aspx页面等问题了。
更新:
不使用数据源页面及ViewData,直接通过API返回json数据更简单。经过测试,完美无误!