MVC4 Razor视图下使用iframe加载RDLC报表
MVC视图下默认是不支持服务器端控件的,所以,为了能够通过report viewer控件加载报表,需要在MVC视图添加嵌入的页面。
起初在stackoverflow上找到一个解决方案,见这里。不过这里的解决方案的一个最大缺陷是,不支持页面导航,也就是只能显示报表的第一页。
因为,原作者也说了,MVC页面下不支持导航控件的post back,也就无法正常工作。
看到评论里有人说iframe才可以解决多页报表的问题,于是试了试,最终成功搞定。
1.在项目中新建立WebForm1.aspx,并修改Global.asax.cs使得aspx页面可以直接访问。
routes.IgnoreRoute("WebForms/{weform}");
2.在需要加载报表的试图页面添加iframe定义,并添加对WebForm1.aspx的引用。
<iframe id="ifr" src="../WebForms/WebForm1.aspx" width="900px" height="700px" frameborder=0>
</iframe>
3.WebForm1.aspx中添加report viewer控件,并引用设计的报表。
<form id="Form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="uid" runat="server">
<ContentTemplate>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" AsyncRendering="false"
Height="800px" Width="900px" ShowFindControls="False"
ShowBackButton="False" PageCountMode="Actual"></rsweb:ReportViewer>
</ContentTemplate>
</asp:UpdatePanel>
</form>
4.后台代码的Page_Load方法中,添加数据源。
ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Reports/Report1.rdlc");
ReportDataSource reportDataSource = new ReportDataSource("DataSet1", yourdatasource);
ReportViewer1.LocalReport.DataSources.Add(reportDataSource);
ReportViewer1.LocalReport.Refresh();
5.现在报表就可以显示了,不过为了让报表可以接收页面的参数,需要添加一点代码。在视图页面的刷新方法中,根据不同的过滤条件,为iframe指定不同的url地址。
function reloadData() {
var fil = filterfield.value;
var urlstr = ifr.location.href + '?filter=' + fil;
ifr.window.location.href=urlstr;
}
6.在WebForm1.aspx的后台代码中,获取url参数。
string filter= Request.QueryString["filter"];
7.将参数应用到数据查询中,这样就可以通过页面查询更新报表的显示数据了。
MVC4 Razor视图下使用iframe加载RDLC报表的更多相关文章
- Android UI--自定义ListView(实现下拉刷新+加载更多)
Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...
- iframe加载方案及性能
普通方法加载iframe 在onload之后加载iframe setTimeout来加载iframe 友好型iframe加载 转载地址:翻译文章-iframe异步加载技术及性能 英文原文:Iframe ...
- 转载:通过扩大IE使用内存,解决skyline在IE下模型不能加载的方法
转自:https://www.cnblogs.com/cannel/p/5261009.html 环境:skyline TerraExploere 6.6,win 10 sp1 64位,ie 11 情 ...
- 分页插件思想:pc加载更多功能和移动端下拉刷新加载数据
感觉一个人玩lol也没意思了,玩会手机,看到这个下拉刷新功能就写了这个demo! 这个demo写的比较随意,咱不能当做插件使用,基本思想是没问题的,要用就自己封装吧! 直接上代码分析下吧! 布局: & ...
- 判断iframe加载完成
一.js判断 var parFrame = document.getElementById("oIframe"); if(parFrame.attachEvent){ parFra ...
- 向下滚动页面加载图片的js
js代码 scroll.photo.js : window.imgscroll = { options: { target: null, //插入图片的目标位置 img_list: null, //图 ...
- MVC中在一个视图中,怎么加载另外一个视图?
在RazorView.cshtml视图: <!--在视图中调用无返回值的方法,视图中调用无返回值的方法,要加上大括号--> <!--在一个视图中,直接加载另外一个视图--> @ ...
- 页面滚动动态加载数据,页面下拉自动加载内容 jquery
<!DOCTYPE=html> <html> <head> < script src="js/jquery.js" type=" ...
- ie6,7下js动态加载图片不显示错误
ie6,7下js动态加载图片不显示错误 先描述一下出现这种匪夷所思bug的背景: 我在页面加载的时候加载一堆小缩略图,<a href="javascript:void(0);" ...
随机推荐
- Oracle中的over(partition by...)分析函数及开窗函数
假设有一张表student Name Score InsertTime (Name:姓名 Score:成绩 InsertTime:考试时间) 张三 20 2015-08-08 ...
- 创建dblink遇到一系列问题
创建dblink遇到一系列问题,有时间 把问题整理一下
- Swift 提示 error running playground...
创建playground之后,我们将得到一个错误提示,Error running playground: Failed to prepare for communication with playgr ...
- C语言零移位操作
给定一个整形数组要求把其中的零元素移动到数组的末尾 非零元顺序保持不变 以下采用两种方法实现 #include <stdlib.h> #include <stdio.h> #i ...
- Zsh安装CMake补全脚本进行CMake命令补全
最近在尝试使用Zsh,发现其补全命令的功能相当厉害.但对CMake命令的补全在默认的5.0.5中好像没有看到,网上找了下关于配置Zsh补全的文章也没有多少. 于是自己动手,发现在Zsh安装目录 ...
- bash shell学习-实践 (自己实现一些小工具)
The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux S ...
- C# 根据IP查询地址归属地
必备文件:IPLocation.dll.QQWry.Dat 下载地址:http://pan.baidu.com/s/1jG1dlOy (可百度下载) 之前有过将 QQWry.Dat 转为 Access ...
- Yii2的相关学习记录,自定义gii模板和引用vendor中的js、css(四)
上文中后台模板框架已经搭建起来了,但还是有些不协调,像是有两个User标题,或者我们想自己在gii生成时添加或删除些公用的东西.这就需要我们定义自己的gii模板. 我们以CRUD的模板为例,默认的gi ...
- Python自动化运维之12、面向对象进阶
上一篇<面向对象基础>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公 ...
- jdom学习:读取xml文件
用JDOM读取XML文件需先用org.jdom.input.SAXBuilder对象的build()方法创建Document对象,然后用Document类.Element类等的方法读取所需的内容.IB ...