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");
}

 

posted @   吴东雷  阅读(1221)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示