ASP.NET AJAX Проблема - PullRequest
       8

ASP.NET AJAX Проблема

0 голосов
/ 18 марта 2010

Я обновил некоторый код для использования бета-версии инструментария Ajax Control 0911, и по какой-то причине код, который динамически добавляет в код динамически складывающиеся расширители панелей, теперь вызывает следующую ошибку в jscript на стороне клиента ...

Ошибка времени выполнения Microsoft 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>

Итак, мои вопросы:

  • Есть ли проблема с моим кодом, которая очевидно только в более поздней версии инструментария?
  • Кто-нибудь знает о Обходной путь, который я могу попробовать?
  • Может кто-нибудь объяснить, почему эта проблема происходит только в последней версии?

1 Ответ

0 голосов
/ 19 марта 2010

Хорошо, так что я наконец исправил это методом проб и ошибок:)

По некоторым причинам использование Uri.EscapeDataString () для удаления пробелов в именах элементов управления приводило к тому, что элементы управления не распознавались.

Изменяя код, используйте string.Replace ('', '_'), теперь он работает. Это, однако, означает, что экранируются только пробелы, но этого достаточно для этого решения.

...