Crystal Reports Images和ASP.Net MVC

时间:2010-01-05 12:39:59

标签: asp.net-mvc crystal-reports

使用CrystalImageHandler.aspx的图表和图片时,我遇到了Crystal Reports的问题。图像无法显示,我怀疑这是由于MVC路由问题。

路径图像路径与此类似:

  

SRC = “/ CrystalImageHandler.aspx?动态图片= cr_tmp_image_a8301f51-26de-4869-be9f-c3c9ad9cc85e.png”

使用与此类似的网址:

  

本地主机:01234 / ViewCrystalReports.aspx ID = 50

无法找到图像,因为它正在寻找一个不存在的目录。如何更改CrystalImageHandler.aspx所在的路径?我想如果我从根本引用问题就会解决,但是我在Web.Config中改变的任何东西都无法工作。

我应该提到这是在传统的aspx页面上,而不是视图等

5 个答案:

答案 0 :(得分:6)

我在编辑Web.Config文件

时解决了这个问题

插入以下行:

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

*注意写下你的号码版本(Version = xx.x.xxxx.x)

答案 1 :(得分:2)

想出来。路由正在干扰正在生成的CrystalImageHandler.aspx链接。 Global.aspx有以下行告诉路由引擎忽略资源文件:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

但这不是传统的资源文件,出于某种原因它是一个aspx文件(任何人都知道为什么?)

添加此修复它:

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

答案 2 :(得分:2)

public class CrystalImageHandlerController : Controller
{
    //
    // GET: /Reports/CrystalImageHandler.aspx

    public ActionResult Index()
    {
        return Content("");
    }

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {

        var handler = new CrystalDecisions.Web.CrystalImageHandler();
        var app = (HttpApplication)filterContext.RequestContext.HttpContext.GetService(typeof(HttpApplication));
        if (app == null) return;

        handler.ProcessRequest(app.Context);

    }
}

此控制器将调用处理程序。只需添加一个到CrystalImageHandler.aspx的路径,它也可以用于您想要的任何子路径(在本例中为/ reports)。我无法通过配置让处理程序完成的事情。

答案 3 :(得分:0)

要在本地计算机中查看,您将在Web配置

中添加以下代码
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"    type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,Version=10.2.3600.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" /> 
</httpHandlers>

...............................

<appSettings>       
<add key="CrystalImageCleaner-AutoStart" value="true" />
<add key="CrystalImageCleaner-Sleep" value="60000" />
<add key="CrystalImageCleaner-Age" value="120000" />    
</appSettings>

以下代码用于在服务器

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

:)我将在web config中添加

来解决这个问题

答案 4 :(得分:0)

这是因为路由干扰了CrystalImageHandler.aspx。因此,无论是在Global.asax还是routeConfig文件中,我们都可以忽略.aspx扩展文件的路由。您可以通过添加以下行来忽略.aspx扩展路由。

routes.IgnoreRoute(“{ allaspx}”,new {allaspx = @“。 .aspx(/.*)?"});