解决ASP.NETZ中ReportView与IE11的兼容性问题

      前久发现以前用ReportView开发的一个软件的报表,在IE11上运行时出错,陆续查了好几天才解决了问题。

  开发环境:

  VS2010,ReportView 10.0.402,RDLC报表模板

  问题:

  1.查询时报表出错。

  2.报表控件上不显示打印按钮。

  3.打印按钮显示出来后,打印不了。

  原因解决:

  1.查询时报表出错:

   在报表模板中加入了“横线”控件所致,删除即正常了。

  2.报表控件上不显示打印按钮:

  原因:

  由于ReportView的打印功能是依赖于一个RSClientPrint的ActiveX控件的,而ActiveX只能运行在IE浏览器上。

  微软改变了IE11的User-Agent 

        IE11:User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

    IE10:User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

  致使ReportView控件服务器端判断当前的IE11浏览器为非IE浏览器,没有发送创建“打印”按钮的相关js代码,所以没有显示打印按钮。

  解决:

  在网站根目录下创建App_Browsers目录加入browser文件。

<browsers>    <browser id="IE11" parentID="Mozilla">        <identification>            <userAgent match="Trident//7.0; rv:(?'version'(?'major'/d+)(/.(?'minor'/d+)?)(?'letters'/w*))(?'extra'[^)]*)" />            <userAgent nonMatch="IEMobile" />        </identification>        <capture>            <userAgent match="Trident/(?'layoutVersion'/d+)" />        </capture>        <capabilities>            <capability name="browser"              value="IE" />            <capability name="layoutEngine"         value="Trident" />            <capability name="layoutEngineVersion"  value="${layoutVersion}" />            <capability name="extra"                value="${extra}" />            <capability name="isColor"              value="true" />            <capability name="letters"              value="${letters}" />            <capability name="majorversion"         value="${major}" />            <capability name="minorversion"         value="${minor}" />            <capability name="screenBitDepth"       value="8" />            <capability name="type"                 value="IE${major}" />            <capability name="version"              value="${version}" />        </capabilities>    </browser>    <!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->    <browser id="IE110" parentID="IE11">        <identification>            <capability name="majorversion" match="11" />        </identification>        <capabilities>            <capability name="ecmascriptversion"    value="3.0" />            <capability name="jscriptversion"       value="5.6" />            <capability name="javascript"           value="true" />            <capability name="javascriptversion"    value="1.5" />            <capability name="msdomversion"         value="${majorversion}.${minorversion}" />            <capability name="w3cdomversion"        value="1.0" />            <capability name="ExchangeOmaSupported" value="true" />            <capability name="activexcontrols"      value="true" />            <capability name="backgroundsounds"     value="true" />            <capability name="cookies"              value="true" />            <capability name="frames"               value="true" />            <capability name="javaapplets"          value="true" />            <capability name="supportsCallback"     value="true" />            <capability name="supportsFileUpload"   value="true" />            <capability name="supportsMultilineTextBoxDisplay" value="true" />            <capability name="supportsMaintainScrollPositionOnPostback" value="true" />            <capability name="supportsVCard"        value="true" />            <capability name="supportsXmlHttp"      value="true" />            <capability name="tables"               value="true" />            <capability name="supportsAccessKeyAttribute"    value="true" />            <capability name="tagwriter"            value="System.Web.UI.HtmlTextWriter" />            <capability name="vbscript"             value="true" />        </capabilities>    </browser></browsers>

  3.打印按钮显示出来后,打印不了:

  原因:

  由于ReportView在页面生成时并不直接加载RSClientPrint控件,而是在点击打印按钮时由JS动态添加OBJECT元素来加载RSClientPrint控件,问题就在这里。

原来IE11在添加OBJECT元素后并没有从服务器端加载RSClientPrint控件,所以打印无效。

  解决:

  在aspx页面中直接加入OBJECT元素。

<%if(Request.Browser.Type.IndexOf("IE11")>-1){%>    <object id="ReportViewer1_PrintObj" classid="CLSID:5554DCB0-700B-498D-9B58-4E40E5814405" codebase="/Reserved.ReportViewerWebControl.axd?
Culture=2052&amp;CultureOverrides=True&amp;UICulture=2052&amp;UICultureOverrides=True&amp;ReportStack=1&amp;
ControlID=57e8d903ef7748f7a0c02a1c6bdb851d&amp;Mode=true&amp;OpType=PrintCab&amp;Arch=X86#Version=2009,100,1750,0" style="display: none;" 
VIEWASTEXT=""></object><%} %>

    注意:object 的id="ReportViewerID"_PrintObj,codebase=路径,可能由于控件版本的不同而和本例不同。

【好消息】 客户端为DHTML浏览方式的例子已经可以推出,敬请访问:http://www.soft2web.biz/WebReport/basicreport.asp,同时推出繁体文版与英文版,届时欢迎本公司网站下载试用!http://www.soft2web.biz/WebReport/reportdownload.asp 【重要提示】 如果您是第一次试用该软件,请您在下载安装后先运行在线注册。如果由于其他原因,您无法注册成功,请先注册网站会员,并用安装组的客户号工具生成客户号并发给我们,信附带上您的会员账号,我们会尽快发给您license,谢谢您的合作与支持! Ming-WebReport是深圳明宇科技有限公司研发的,功能强大且简单易用的专业Web报表开发工具。很好地解决了B/S架构软件报表制作及预览、打印等难题,用它能轻松地完成复杂而美观的Web报表的制作、打印(包括套打),并能存取、分析、分享数据,以及转换、分发、管理报表,与国外同类报表工具相比,具有极高的性价比,而且更好地解决国式报表问题,是真正适合国软件开发者的Web报表工具! ??Ming-WebReport可以将报表紧密集成到ASP、.NET、J2EE等应用,很好地做到了报表设计与应用程序开发的分离;支持多种类型数据源,包括:表、SQL、存储过程、XML,并支持ACCESS、SQL Server、Oracle、DB2、Sybase等多种数据库;可以运行于多种操作系统Windows、Unix、Linux以及多种Web平台,提供简繁体文、英文等多个语种的版本,是一套完整的Web报表解决方案。 Ming-WebReport包括三个部分,Report Designer(报表设计器),用于设计制作报表;Report Engine(报表引擎),用于服务器端处理报表;Report Browser(报表浏览器),用于客户端浏览报表。 在这里有大量精美的典型报表和行业应用报表示例供您观赏,敬请访问:http://www.soft2web.com/webreport/index.htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值