2010-03-18 121 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(」」, '_')現在它工作。這確實意味着,但是隻有空間才能逃脫,但對於這個解決方案來說這足夠好。