7

MVC3アプリケーションの通常のASP.NETaspxページでCrystalReportsViewerを使用しています。コントローラのアクションでは、aspxページにリダイレクトするだけで、レポートは正常に表示されます。しかし、問題は動的画像にあります。これとこれに対する最も簡単な解決策は、画像パスをレポートパラメータとして渡し、このパラメータを画像ソースとして設定することです。Visual Studioプレビューではこれは正常に機能しますが、実行するとページにこのエラーが表示されます。

"NetworkError:404 Not Found- server /ReportWebForms/CrystalImageHandler.aspx?dynamicimage=cr_tmp_image_4fbcb73a-e001-4365-84fc-164788dd1605.png"

したがって、Crystalレポートの経験がないので、問題はCrystalImageHandler.aspxにあると思います。Web.configに次のエントリがあります。

  <httpHandlers><add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></httpHandlers></system.web>
  <handlers><add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/></handlers></system.webServer>

これはMVCタイプの問題ですか?誰かがこれを手伝ってもらえますか?

ありがとうございました

4

4 に答える 4

13

同じ問題が発生しましたが、幸い、CrystalReportsの使用経験があります。

「path」属性がサイトルートに設定されているため、Web.configを変更する必要があります。ブラウザでURLを開き、そこからReportWebFormsを削除すると機能します。

実際、私はさらに2行の構成を追加しました。

<system.web>
    <httpHandlers>
      <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
      <!-- Added -->
      <add verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
      <add verb="GET,HEAD" path="asset.axd" validate="false" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </httpHandlers>
</system.web>

<system.webServer>
    <handlers>
      <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
      <add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode" />
      <!-- Added -->
      <add name="CrystalImageHandler.aspx_GETR" verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode" />
      <remove name="asset" />
      <add name="asset" preCondition="integratedMode" verb="GET,HEAD" path="asset.axd" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </handlers>
</system.webServer>

そして最後に、MVCアプリケーションのルートを無視するルールを追加する必要があります。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
// Here is added new ignore rule
routes.IgnoreRoute("Reports/{resource}.aspx/{*pathInfo}");

私の場合、.aspxファイルが配置されているReportsという名前のフォルダーがあります。あなたの場合、これをReportWebFormsに変更する必要があると思います。

于 2013-11-04T13:46:13.583 に答える
6

私の場合、MVCのルーティングを無視するだけで済みました。@ Hovhannesソリューションに追加するには、このルールをRouteconfig.csに追加する必要があります。

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });
于 2015-07-27T17:26:46.833 に答える
4

このコードをCrystalImageHandler.aspxとして使用します。

<%@ Page Language="C#" AutoEventWireup="true" %>

<script runat="server" language="c#" >
    protected void Page_Load(object sender, EventArgs e)
    {
        CrystalDecisions.Web.CrystalImageHandler handler = new CrystalDecisions.Web.CrystalImageHandler();
        handler.ProcessRequest(this.Context);            
    }
</script>
于 2018-10-01T20:05:07.697 に答える
2

回答:これをRouteConfig.csファイルに追加してください

routers.IgnoreRoute( "Reports / {resource} .aspx / {* pathInfo}");

注:「レポート」は、aspxページを表示するCrystalレポートを含むディレクトリ名です。

ここに画像の説明を入力してください

于 2015-12-17T07:37:52.400 に答える