Frage

Ich habe diese Frage in dem DataDynamics Forum heute früher. Ich dachte, dass vielleicht würde ich eine Art Antwort erhalten hier bei SO.

Ich versuche, die WebViewers und laufe in meiner ASP.NET MVC-Anwendung zu bekommen. Ich versuche, die webviewer in der Steuerung (webViewer.RenderControl (Htmltextwriter) und dann die Ergebnisse in Viewdata setzen zu machen und den Bericht meiner Ansicht angezeigt werden soll. Ich nicht‘mal, ob dies der richtige Weg ist, um dies zu realisieren. Jede Hilfe wäre sehr dankbar.

Controller-Code:

    public ActionResult Display()
    {

        CurrentReport = new DetailedReport { ReportData = new DetailedData() { Repository = _repository } };

        var webViewer = new WebViewer();
        CurrentReport.Run();
        webViewer.ID = "WebViewer1";
        webViewer.Visible = true;
        webViewer.ViewerType = ViewerType.HtmlViewer;
        webViewer.Width = Unit.Percentage(100);
        webViewer.Report = CurrentReport;


        var stringWriter = new StringWriter();
        var htmlTextWriter = new HtmlTextWriter(stringWriter);
        webViewer.RenderBeginTag(htmlTextWriter);
        webViewer.RenderControl(htmlTextWriter);
        webViewer.RenderEndTag(htmlTextWriter);

        ViewData["WebViewer"] = stringWriter.ToString();

        return View();
    }

Display.aspx Code:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Register assembly="ActiveReports.Web, Version=5.2.1013.2, Culture=neutral, PublicKeyToken=cc4967777c49a3ff" namespace="DataDynamics.ActiveReports.Web" tagprefix="ActiveReportsWeb" %>
<%@ Import Namespace="xxxx.Core"%>

<asp:Content ID="Content1" ContentPlaceHolderID="ClientAdminContent" runat="server">
    <%=ViewData["WebViewer"] %>
</asp:Content>

Fehler:

Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt. Beschreibung: Eine nicht behandelte Ausnahme trat während der Ausführung der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über den Fehler und wo es im Code verursacht.

Ausnahmedetails: System.NullReferenceException:. Objektverweis nicht auf eine Instanz eines Objekts festgelegt

Quellfehler:

Zeile 60: var Htmltextwriter = new Htmltextwriter (String); Zeile 61: webViewer.RenderBeginTag (Htmltextwriter); Linie 62: webViewer.RenderControl (Htmltextwriter); Linie 63: webViewer.RenderEndTag (Htmltextwriter); Zeile 64:

Quelldatei: C: \ Projects \ xxxx \ xxxx \ app \ xxxx.Web.Controllers \ ReportsController.cs Zeile: 62

**** Update: ****

Auf der Grundlage der Antwort von scott (danke) mein Controller sieht nun wie folgt aus:

    public ActionResult Display()
    {
        ViewData["Report"] = new DetailedReport { ReportData = new DetailedReport { ReportData = new DetailedData() { Repository = _repository } };
        return View();
    }

Und meine Ansicht sieht wie folgt aus:. (Ich habe keinen Code hinter Dateien für meine Ansichten)

<%
    var report = (ActiveReport3) ViewData["Report"];
    report.Run();
    WebViewer1.Report = report;
%>
<ActiveReportsWeb:WebViewer ID="WebViewer1" runat="server" Height="100%" Width="100%" ViewerType="AcrobatReader" />

Ich sehe es durch Debugger gehen, und es scheint richtig durch den Abschnitt Details für Schritt, Werte in meine Felder setzen. Aber nachdem alles getan ist, erhalte ich die Meldung „No Report angegeben.“ Ich hoffe, dass ich wirklich braucht nicht eine Code-Behind-Datei auf meiner Ansicht verwenden, weil ich nicht mit ihnen überall sonst. Ich habe auch, dass report.Document.Pages.Count> 0 ich den Codeblock sowohl oberhalb als auch unterhalb der WebViewers Kontrolle gestellt haben, um zu überprüfen debuggt (glaube nicht, dass es wirklich ankommt). Alle zusätzlichen Gedanken?

**** Update # 2: ****

ich am Ende mit der Antwort finden Sie hier: Alternative des OnLoad-Ereignis in einer ASP.Net MVC-Ansicht zu verwenden in Kombination mit Scotts ausgezeichneter Antwort unten. Es war ein Timing-Sache mit der Erzeugung und Binden des Berichts an die Steuerung. Also meine Ansicht wie folgt aussieht am Ende ... (wo Model.Report ist ein ActiveReport3)

<script runat="server">
    private void Page_Load(object sender, EventArgs e)
    {
        var report = Model.Report;
        report.Run();
        WebViewer1.Report = report;
    }
</script>

<asp:Content ID="Content1" ContentPlaceHolderID="ClientAdminContent" runat="server">
    <ActiveReportsWeb:WebViewer ID="WebViewer1" runat="server" Height="100%" Width="100%" ViewerType="AcrobatReader" />
</asp:Content>

Vielen Dank für die Hilfe aller!

War es hilfreich?

Lösung

Wir haben das intern untersucht und fanden die folgende Lösung. Sie können normalerweise die WebViewer auf einen Blick hinzuzufügen. Es besteht keine Notwendigkeit für den komplizierten Low-Level-Interaktion Code in Ihrem Beispiel. Stattdessen fügen Sie einfach den WebViewer zu Ihrer aspx Ansicht normal. In unserem Beispiel wurde die WebViewers wie folgt hinzugefügt:

<ActiveReportsWeb:WebViewer ID="WebViewer1" runat="server" Height="100%" Width="100%" ViewerType="AcrobatReader" />

Das ist genug, um den WebViewer zu bekommen für die Sicht zu arbeiten.

In der Steuerung angegeben wir eine ActiveReport wie folgt:

ViewData["Report"] = new SampleReport();

In der Code-Behind der Ansicht wir den Bericht zur Ansicht Haken:

WebViewer1.Report = ViewData["Report"] as ActiveReport3;

Dann wird der schwierige Teil beginnt. Es gibt einige IHttpHandlers von Activereports verwendet, wenn unter ASP.NET für einige der Zuschauer Typen wie Acrobat / PDF ausgeführt wird. Um sicherzustellen, dass unsere Handler arbeiten Sie ASP.NET MVC Routing zu ermöglichen, erhalten müssen sie als normal zu verarbeiten. Glücklicherweise ist es einfach, dies zu tun. Fügen Sie einfach die folgende Zeile Code in die Datei Global.asax.cs:

routes.IgnoreRoute("{*allarcachitems}", new { allarcachitems = @".*\.ArCacheItem(/.*)?" });

Das wird die Route ignorieren. Beachten Sie, dass nach meiner Lektüre es Probleme geben kann, da ASP.NET-Routing nur eine einzige zu ermöglichen scheint „alle fangen“ Route wie diese. Deshalb, wenn Sie mehrere dieser IgnoreRoute haben Befehle und oder Sie irgendwelche Probleme mit einer .axd Datei, werden Sie die Einschränkungen Wörterbuch Argument ändern müssen, um die .axd sowie .ArCacheItem accomidate.

Weitere Informationen finden Sie im folgenden Artikel: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx

Sie können die vollständige Probe aus unserem Forum Download unter http: // www.datadynamics.com/forums/ShowPost.aspx?PostID=121907#121907

Scott Willeke
Data Dynamics / GrapeCity

Andere Tipps

Für jemand dieses Problem hat und mit IIS7 Stellen Sie sicher, dass die Active Reports-Handler unter dem <handlers> Abschnitt hinzufügen nicht <httpHandlers>.

<add name="RPX" verb="*" path="*.rpx" type="DataDynamics.ActiveReports.Web.Handlers.RpxHandler, ActiveReports.Web, Version=6.1.2814.0, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>
            <add name="ActiveReport" verb="*" path="*.ActiveReport" type="DataDynamics.ActiveReports.Web.Handlers.CompiledReportHandler, ActiveReports.Web, Version=6.1.2814.0, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>
            <add name="ArCacheItem" verb="*" path="*.ArCacheItem" type="DataDynamics.ActiveReports.Web.Handlers.WebCacheAccessHandler, ActiveReports.Web, Version=6.1.2814.0, Culture=neutral, PublicKeyToken=cc4967777c49a3ff"/>

Ich dachte, dass ich die IgnoreRoute Setup nicht richtig hatte, weil ich 404-Fehler bekommen. Allerdings wurde ich im Anschluss an dem von Activereport gegeben Tutorial, das sich in dem IIS6 Abschnitt statt IIS7 hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top