سؤال

لقد سألت هذا السؤال في DataDynamics المنتدى في وقت سابق اليوم.ظننت أنه ربما أود الحصول على بعض نوع من رد هنا في ذلك.

أنا أحاول الحصول على WebViewer وتشغيلها في ASP.NET MVC التطبيق.أنا أحاول تقديم webviewer في وحدة تحكم (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();
    }

عرض.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>

خطأ:

كائن مرجع لم يتم تعيينها إلى مثيل الكائن.وصف:حدث استثناء غير معالج أثناء تنفيذ طلب ويب الحالي.يرجى مراجعة تتبع المكدس للحصول على مزيد من المعلومات حول الخطأ و أين نشأت في المدونة.

تفاصيل الاستثناء:النظام.NullReferenceException:كائن مرجع لم يتم تعيينها إلى مثيل الكائن.

الخطأ من المصدر:

خط 60:فار 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 eportsController.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" />

أنا مشاهدته من خلال الذهاب المصحح ، ويبدو بشكل صحيح خطوة من خلال التفاصيل القسم وضع القيم في الحقول.ولكن بعد كل ما فعلت ، أحصل على الرسالة "لا تقرير المحدد." أنا على أمل أن أنا حقا لم يكن لديك لاستخدام codebehind الملف على رأيي لأنني لا تستخدم لهم في أي مكان آخر.كما تصحيحه للتحقق من ذلك التقرير.الوثيقة.صفحات.Count > 0.لقد وضعت كتلة التعليمات البرمجية على حد سواء فوق وتحت WebViewer التحكم (لا أعتقد أنه يهم حقا).أي أفكار ؟

****تحديث #2:****

انتهى بي الأمر باستخدام الجواب العثور عليها هنا: بديل باستخدام OnLoad الحدث في ASP.Net MVC الرأي ؟ في تركيبة مع سكوت ممتازة الإجابة أدناه.كان توقيت الشيء مع توليد ملزمة التقرير إلى السيطرة.لذلك من وجهة نظري يبدو مثل هذا في النهاية...(حيث نموذج.التقرير 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>

شكرا على مساعدة الجميع!

هل كانت مفيدة؟

المحلول

لقد حققت هذا داخليا وجدت الحل التالي.يمكنك إضافة WebViewer على منظر طبيعي.هناك حاجة معقدة انخفاض مستوى التفاعل الكود في المثال الخاص بك.بدلا من ذلك, فقط إضافة WebViewer إلى aspx عرض بشكل طبيعي.في عينة WebViewer أضيف على النحو التالي:

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

وهذا هو ما يكفي للحصول على WebViewer تعمل على رأي.

في وحدة تحكم علينا المحدد وهو ActiveReport على النحو التالي:

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

في codebehind ترى نحن ربط التقرير إلى الرأي القائل:

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

ثم يبدأ الجزء صعبة.هناك بعض IHttpHandlers المستخدمة من قبل ActiveReports عند تشغيل تحت ASP.NET بعض المشاهد أنواع مثل أكروباتريدير / PDF.لضمان معالجات العمل يجب أن تحصل على ASP.NET MVC التوجيه للسماح لهم عملية طبيعية.لحسن الحظ أنه من السهل القيام بذلك.فقط إضافة سطر التعليمات البرمجية التالي إلى العالمية.asax.cs الملف:

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

التي سيتم تجاهل الطريق.علما أنه وفقا قراءتي قد تكون هناك مشاكل منذ ASP.NET التوجيه يبدو أن تسمح واحدة فقط القبض على "جميع" الطريق مثل هذا.لذلك إذا كان لديك العديد من هذه IgnoreRoute الأوامر أو لديك أي مشاكل مع .الملف axd, سوف تحتاج إلى تعديل القيود القاموس حجة accomidate على .axd وكذلك .ArCacheItem.

لمزيد من المعلومات راجع المقالة التالية: http://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx

يمكنك تحميل كامل عينة من المنتديات في http://www.datadynamics.com/forums/ShowPost.aspx?PostID=121907#121907

سكوت برامج خرجوا سويا
بيانات ديناميكية / GrapeCity

نصائح أخرى

على أي شخص آخر على هذه المسألة باستخدام IIS7 تأكد من إضافة النشطة التقارير معالجات تحت <handlers> قسم لا <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"/>

كنت أظن أن IgnoreRoute الإعداد غير صحيح لأنني كنت الحصول على 404 أخطاء.ومع ذلك كنت أتابع البرنامج التعليمي قدمها ActiveReports الذي لهم في IIS6 القسم بدلا من IIS7.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top