Я думал, что неправильно настроил IgnoreRoute, потому что я получал 404 ошибки. Однако я следовал учебному пособию, данному ActiveReports, в котором они содержатся в разделе IIS6 вместо IIS7.

ал этот вопрос на форуме DataDynamics ранее сегодня. Я думал, что, возможно, я получу какой-то ответ здесь, на SO.

Я пытаюсь запустить и запустить WebViewer в моем приложении ASP.NET MVC. Я пытаюсь отобразить веб-обозреватель в контроллере (webViewer.RenderControl (htmlTextWriter), а затем поместить результаты в ViewData и отобразить отчет в своем представлении. Я даже не знаю, является ли это правильным способом сделать это. Любая помощь будет принята с благодарностью.

Код контроллера:

    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 код:

<%@ 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>

Ошибка:

В экземпляре объекта не задана ссылка на объект. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

Ошибка источника:

Строка 60: var htmlTextWriter = new HtmlTextWriter (stringWriter); Строка 61: webViewer.RenderBeginTag (htmlTextWriter); Строка 62: webViewer.RenderControl (htmlTextWriter); Строка 63: webViewer.RenderEndTag (htmlTextWriter); Строка 64:

Исходный файл: C: \ Projects \ xxxx \ xxxx \ app \ xxxx.Web.Controllers \ ReportsController.cs Строка: 62

****Обновить:****

На основании ответа Скотта (спасибо) мой контроллер теперь выглядит так:

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

И мой взгляд выглядит следующим образом: (У меня нет кода за файлами для моих просмотров).

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

Я смотрю, как он проходит через отладчик, и кажется, что он правильно переходит через раздел Details, помещая значения в мои поля. Но после того, как все сделано, я получаю сообщение"Отчет не указан." Я надеюсь, что мне действительно не нужно использовать файл codebehind в моем представлении, потому что я не использую их где-либо еще. Я также отладил, чтобы убедиться, что report.Document.Pages.Count> 0. Я поместил блок кода выше и ниже элемента управления WebViewer (не думаю, что это действительно имеет значение). Есть дополнительные мысли?

**** Обновление № 2: ****

Я закончил тем, что использовал ответ, найденный здесь:Альтернатива использованию события OnLoad в ASP.Net MVC View? в сочетании с превосходным ответом Скотта ниже. Это было время для генерации и привязки отчета к контролю. Так что мой вид в конце концов выглядит так ... (где Model.Report - 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>

Спасибо всем за помощь!

Ответы на вопрос(2)

Ваш ответ на вопрос