ReportViewerWebWebpart显示报表时显示的脚本错误:Uncaught Sys.ArgumentNullException: Sys.ArgumentNullException: 值不能为 null。参数名: panelsCreated[0]
原因可能有三个:
1、ReportService版本太低,所以可以升级Sql Server 2008 R2 SP2.
2、母版页中的ScriptManager的属性加上ScriptMode="Release"
3、在站点的web.config中将设置为<compilation batch="false" debug="false" optimizeCompilations="true">,其主要原因是debug为true的时候会出现这个错误。
其中第1、2个可能都不是主要原因,但我在测试的时候由于已经安装了SP2,所以也不可能把它卸载后再去测试,估且这样认为吧。
另外附上控制ReportViewerWebPart过滤参数以及控制缩放的方法:
在页面的后台代码中加入(或者直接写到aspx文件中):
protected override void OnLoad(EventArgs e) { if (! this .IsPostBack) { ReportViewerWebPart viewer = FindMainWebpart<ReportViewerWebPart>(); if (viewer != null ) { viewer.OverrideParameters.Clear(); viewer.OverrideParameters.Add( new Microsoft.Reporting.WebForms.ReportParameter( "aa" , "13,14" , false ));<br> ReportViewer rptViewer = ReflectorUtils.getField<ReportViewer>( "m_reportViewer" , viewer);<br> rptViewer.ZoomMode = ZoomMode.PageWidth; } } base .OnLoad(e); } /// <summary> /// 找到页面的Webpart /// </summary> /// <param name="webPartZoneId">WebpartZone的Id</param> /// <returns></returns> protected T FindWebpart<T>( string webPartZoneId) where T : Microsoft.SharePoint.WebPartPages.WebPart { #region 已注释:通过Master找特定WebPartZone的控件 //1.此种方式只能获取指定区域的Webpart //ContentPlaceHolder holder =(ContentPlaceHolder)Master.FindControl("PlaceHolderMain"); //if (holder != null) //{ // WebPartZone zone = (WebPartZone)holder.FindControl("Main"); // foreach (WebPart control in zone.WebParts) // { // if (control is XsltListViewWebPart) // { // } // } //} #endregion T result = default (T); SPWebPartManager sPWebPartManager = SPWebPartManagerInPage; if ((sPWebPartManager.Zones != null ) && (sPWebPartManager.Zones.Count > 0)) { foreach (Microsoft.SharePoint.WebPartPages.WebPartZone zone in sPWebPartManager.Zones) { if (zone.ID == webPartZoneId) { foreach (Microsoft.SharePoint.WebPartPages.WebPart webpart in zone.WebParts) { if (webpart is T) { result = (T)webpart; break ; } } } if (result != null ) { break ; } } } return result; } /// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> protected T FindMainWebpart<T>() where T : Microsoft.SharePoint.WebPartPages.WebPart { return FindWebpart<T>( "Main" ); } |
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端