如何在MVC升级后修复chartimg.axd

时间:2014-02-08 05:26:59

标签: asp.net mschart

最近我将ASP.NET WebForms项目升级为MVC混合项目。

它破坏了我们的ASP.NET图表控件 - 图像不再在报表中呈现。

从图表控件的3.5升级到4.0也可能是问题所在。我将本地复制的3.5程序集中的引用替换为 System.Web.UI.DataVisualization.Charting 程序集的4.0 GAC版本。

1 个答案:

答案 0 :(得分:2)

让这项工作重新开始有几个步骤

1)以下是web.config

的相关摘要
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <system.web>
      <pages>
         <controls>
            <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
         </controls>
      </pages>
      <compilation defaultLanguage="c#" targetFramework="4.5">
         <assemblies>
            <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
         </assemblies>
      </compilation>
   </system.web>
   <system.webServer>
      <handlers>
         <remove name="ChartImageHandler" />
         <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </handlers>
   </system.webServer>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="System.Web.DataVisualization" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.5.0.0" newVersion="4.0.0.0" />
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

2)  我需要忽略axd的路线。请求图表图片的网址格式为 http://sitename/reports/chartimg.axd?i=chart444334&i=0

所以我必须小心将/ reports / url包含在路径中

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

请注意,这需要放置在路径的顶部。放置在路径配置的底部时,它不起作用。 MVC路由的专家可能是LDO,但对我来说并不明显。

3)此时正在生成图表,但在尝试提供图表图像时,我仍然没有找到 404图像未找到。这意味着我的web.config中仍然存在问题。

我放弃了尝试使用HTTP处理程序并切换到基于文件的位置。这适用于图表控件本身:

ImageStorageMode = ImageStorageMode.UseImageLocation;

如果您不希望好奇的用户枚举图表,因为编号是可预测的,这是不理想的,幸运的是我的图表不够灵敏,不值得关注。

这也意味着可以删除第一步中的某些web.config。