最近把博客的前台改到了MVC3上去,后台还是WebForm做的。一直有个小bug,今天才刚刚解决。后台页面里有个地方用了ASP.NET 4自带的那个Chart图表控件。原来没用MVC的时候是可以显示的。换了MVC之后,WebForm的代码没有改过,其他都好用,就这个Chart爆了。具体表现为,网页没有报错,就Chart的部分显示不出来。今天检查了一下,并最终解决了这个问题。

首先我在firebug里发现,Chart控件生成的图片是来自一个handler的,但加载失败了:

根据最近玩MVC被坑的经验,可能是URL路由引起的。我去后台日志查看了一下,果然是这样的:

解决办法很简单,在Global.asax里写一条忽略URL路由的规则:

routes.IgnoreRoute("Console/Dashboard/ChartImg.axd");

 

但我很奇怪,MVC3默认已经在Global.asax里加入了忽略所有axd的过滤,为毛这个axd不认呢?

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

据我观察,ASP.NET似乎会把网站目录下每一个单独的文件夹,都当成一个小的站点来处理,能够在子目录里加web.config似乎就是这个道理。所以axd大概也需要重新指定一下吧~

这只是我个人的理解,如有错误,还请ASP.NET帝们指教。