7

我在 MVC3 应用程序的普通 ASP.NET aspx 页面上使用 Crystal 报表查看器。在控制器操作中,我只是重定向到 aspx 页面并且报告显示正常。但问题在于动态图像。我找到了最简单的解决方案,将图像路径作为报告参数传递并将此参数设置为图像源。在 Visual Studio 预览中,这工作正常,但执行时我在页面上看到此错误。

“网络错误:404 未找到 - 服务器/ReportWebForms/CrystalImageHandler.aspx?dynamicimage=cr_tmp_image_4fbcb73a-e001-4365-84fc-164788dd1605.png”

所以我假设,以前没有使用水晶报表的经验,问题出在 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

我遇到了同样的问题,但幸运的是我对 Crystal Reports 有一些经验。

您只需要更改 Web.config,因为“路径”属性设置为站点根目录。如果您在浏览器中打开 url 并从中删除ReportWebForms,它将起作用。

实际上我刚刚添加了两行配置:

<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}");

就我而言,我有一个名为Reports的文件夹,其中放置了 .aspx 文件。我想您应该将其更改为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 文件中添加这个

routes.IgnoreRoute("报告/{resource}.aspx/{*pathInfo}");

注:“Reports”为包含水晶报表查看aspx页面的目录名

在此处输入图像描述

于 2015-12-17T07:37:52.400 回答