2010-03-18 123 views
0

我已经更新了一些代码,使用Ajax控件工具箱0911测试版,该动态添加可折叠面板扩展在后面的代码现在一些原因代码会导致客户端JScript下面的错误...ASP.NET AJAX问题

微软JScript运行时错误:Sys.ArgumentException:值不能为空的控件和行为。 参数名:元素

在...

$create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) { 
    /// <summary locid="M:J#Sys.Component.create" /> 
    /// <param name="type" type="Type"></param> 
    /// <param name="properties" optional="true" mayBeNull="true"></param> 
    /// <param name="events" optional="true" mayBeNull="true"></param> 
    /// <param name="references" optional="true" mayBeNull="true"></param> 
    /// <param name="element" domElement="true" optional="true" mayBeNull="true"></param> 
    /// <returns type="Object"></returns> 
    var e = Function._validateParams(arguments, [ 
     {name: "type", type: Type}, 
     {name: "properties", mayBeNull: true, optional: true}, 
     {name: "events", mayBeNull: true, optional: true}, 
     {name: "references", mayBeNull: true, optional: true}, 
     {name: "element", mayBeNull: true, domElement: true, optional: true} 
    ]); 
    if (e) throw e; 
    if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) { 
     if (!element) throw Error.argument('element', Sys.Res.createNoDom); 
    } 

我接受,这只是一个测试版,但我无法要么找到工作,甚至理解为什么这个非常简单的代码没有更长的作品。

代码

private Panel GetReportPanel(DataRow dr, ReportParameter[] Params) 
{ 
    Panel pnlReport = new Panel(); 
    pnlReport.ID = Uri.EscapeDataString(dr["ReportName"].ToString()) + "_MainReportContainer"; 

    //Report Title Section 
    var pnlReportTitle = new Panel(); 
    pnlReportTitle.CssClass = "ReportSectionTitle"; 
    var tblReportTitle = new Table(); 
    var trowReportTitle = new TableRow(); 
    var tcellReportTitle = new TableCell(); 
    var imgReportTitleExpand = new Image(); 
    imgReportTitleExpand.ID = Uri.EscapeDataString("img" + dr["ReportName"].ToString() + "DataExpand"); 
    tcellReportTitle.Controls.Add(imgReportTitleExpand); 
    trowReportTitle.Controls.Add(tcellReportTitle); 
    tcellReportTitle = new TableCell(); 
    var lblReportTitle = new Label(); 
    lblReportTitle.ID = Uri.EscapeDataString("lnk" + dr["ReportName"].ToString()); 
    lblReportTitle.Text = "Functional " + dr["ReportName"].ToString(); 
    tcellReportTitle.Controls.Add(lblReportTitle); 
    trowReportTitle.Controls.Add(tcellReportTitle); 
    tblReportTitle.Controls.Add(trowReportTitle); 
    pnlReportTitle.Controls.Add(tblReportTitle); 
    pnlReport.Controls.Add(pnlReportTitle); 

    //Report Section 
    var pnlReportSection = new Panel(); 
    pnlReportSection.ID = Uri.EscapeDataString("pnlReportSection" + dr["ReportName"].ToString()); 
    pnlReportSection.CssClass = "ReportSection"; 
    pnlReportSection.ScrollBars = ScrollBars.None; 
    var pnlInnerReportSection = new Panel(); 
    pnlInnerReportSection.CssClass = "ReportSection"; 
    var rptControl = new ReportViewer(); 
    rptControl.ID = "rpt" + dr["ReportName"].ToString().Replace(' ', '_'); 
    rptControl.ProcessingMode = ProcessingMode.Remote; 
    rptControl.Width = new Unit("100%"); 
    rptControl.ShowDocumentMapButton = false; 
    rptControl.ShowParameterPrompts = false; 
    rptControl.Visible = true; 
    rptControl.Height = new Unit("500px"); 
    rptControl.AsyncRendering = (bool)dr["ASyncRenderingEnabled"]; 
    rptControl.ServerReport.ReportPath = dr["SSRSReportPath"].ToString(); 
    rptControl.ServerReport.ReportServerUrl = new Uri("http://horoap336/reportserver"); 
    rptControl.ServerReport.SetParameters(Params); 

    pnlInnerReportSection.Controls.Add(rptControl); 
    pnlReportSection.Controls.Add(pnlInnerReportSection); 
    pnlReport.Controls.Add(pnlReportSection); 

    //Collapsable Panel Extender 
    var Extender = new AjaxControlToolkit.CollapsiblePanelExtender(); 

    Extender.TargetControlID = pnlReportSection.ID; 
    Extender.ID = Uri.EscapeDataString(dr["ReportName"].ToString()) + "_Extender"; 
    Extender.CollapsedSize = 0; 
    Extender.Collapsed = true; 
    Extender.ExpandControlID = lblReportTitle.ID; 
    Extender.CollapseControlID = lblReportTitle.ID; 
    Extender.AutoCollapse = false; 
    Extender.AutoExpand = false; 
    Extender.ScrollContents = false; 
    Extender.TextLabelID = lblReportTitle.ID; 
    Extender.CollapsedText = "Functional " + dr["ReportName"].ToString() + " (Click To Show Details...)"; 
    Extender.ExpandedText = "Functional " + dr["ReportName"].ToString() + " (Click To Hide Details...)"; 
    Extender.ImageControlID = imgReportTitleExpand.ID; 
    Extender.ExpandedImage = "~/images/collapse.jpg"; 
    Extender.CollapsedImage = "~/images/expand.jpg"; 

    Extender.ExpandDirection = AjaxControlToolkit.CollapsiblePanelExpandDirection.Vertical; 

    pnlReport.Controls.Add(Extender); 

    return pnlReport; 

} 

此面板,然后添加到使用aspx文件面板...

pnlContainer.Controls.Add(GetReportPanel(dr,Params)); 

ASPX文件...

<%@ Page Title="Operations MI Dashboard - Functional Reporting" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="FunctionalReport.aspx.cs" Inherits="TelephonyReport" %> 
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
    Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> 

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <asp:Panel ID="pnlContainer" runat="server"> 

    </asp:Panel> 
</asp:Content> 

所以,我的问题是:

  • 我的代码有没有问题, 只在工具包的较新版本 中出现?
  • 有谁知道 一种变通方法,我可以试试吗?
  • 任何人都可以解释为什么这个问题 只发生在最新的版本?

回答

0

好了,我终于通过试验和错误:)

对于使用Uri.EscapeDataString()由于某种原因,除去在控制名字空格固定这是导致控件无法识别。

通过改变代码使用与string.replace(””, '_')现在它工作。这确实意味着,但是只有空间才能逃脱,但对于这个解决方案来说这足够好。