我在MVC3应用程序中的普通ASP.NET aspx页面上使用Crystal报表查看器.在控制器操作中,我只是重定向到aspx页面,报告显示正常.但问题在于动态图像.我找到了最简单的解决方案,将图像路径作为报表参数传递,并将此参数设置为图像源.在Visual Studio预览中,这工作正常但在执行时我在页面上看到此错误.
“NetworkError: 404 Not Found –
server/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,PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/></handlers></system.webServer>
这是MVC类型的问题吗?有人可以帮忙吗?
谢谢
解决方法
我有同样的问题,但幸运的是我有一些Crystal Reports的经验.
您只需要更改Web.config,因为“path”属性设置为site root.
如果您在浏览器中打开URL并从中删除ReportWebForms,它将起作用.
实际上我刚添加了2行配置:
<system.web> <httpHandlers> <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler,PublicKeyToken=692fbea5521e1304" /> <!-- Added --> <add verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler,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,PublicKeyToken=692fbea5521e1304" preCondition="integratedMode" /> <!-- Added --> <add name="CrystalImageHandler.aspx_GETR" verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler,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.