2010-03-18 4 views
0

J'ai mis à jour du code pour utiliser la version bêta de la boîte à outils Ajax Control 0911 et, pour une raison quelconque, les extendeurs de panneaux rétractables dynamiquement ajoutés dans le code maintenant provoquent l'erreur suivante dans le jscript côté client ...ASP.NET AJAX Problème

Erreur d'exécution de Microsoft JScript: Sys.ArgumentException: la valeur ne doit pas être nulle pour les contrôles et les comportements. Nom du paramètre: élément

dans ...

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

J'accepte que ce n'est une version bêta, mais je suis incapable de trouver soit un travail autour ou même de comprendre la raison pour laquelle ce code assez simple pas travaux plus longs.

code

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; 

} 

Ce panneau est ensuite ajouté à un panneau dans le fichier ASPX en utilisant ...

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

fichier 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> 

Alors , mes questions sont:

  • Y at-il un problème avec mon code que est seulement évident dans la version ultérieure de la boîte à outils?
  • Est-ce que quelqu'un sait de une solution de contournement que je peux essayer?
  • Quelqu'un peut-il expliquer pourquoi ce problème se produit uniquement dans la dernière version?

Répondre

0

Ok, donc je me suis finalement fixé ce par essai et erreur :)

Pour une raison quelconque en utilisant Uri.EscapeDataString() pour supprimer l'espace vide dans les noms de contrôle était à l'origine des contrôles à ne pas être reconnus.

En changeant le code, utilisez la chaîne string.Replace ('', '_') cela fonctionne maintenant. Cela signifie, cependant, que seuls les espaces sont échappés, mais c'est assez bon pour cette solution.

Questions connexes