分析:Handler的奇怪现象,<%@加不上
在做项目时,使用Handler时,文件头部无法书写<%@ WebHandler Language="C#" Class="Handler" %>, <%@下面总是有红色错误提示,怎么解决?
解决方案:
1、 新建网站(注意是网站,不是项目)
2、 选择添加新项一般处理程序(Handler)页面,如Handler.ashx
3、在原项目中添加现有项,选择刚刚建好的那个页面Handler.ashx到你的项目里即可。
可是为什么会有这么坑爹的问题存在呢?
事实一:
仔细观察你会发现,在项目里的Handler.ashx与普通的aspx类似,具有Handler.ashx.cs页面,并且默认Handler.ashx就是Handler.ashx.cs,认为它是后台页面,<%@ WebHandler Language="C#" Class="Handler" %>肯定不允许添加。
事实二:
而网站中只有Handler.ashx,VS认为这是前台页面,所以存在<%@ WebHandler Language="C#" Class="Handler" %>是合情合理的。
事实三:
虽然不相同,那采取上面的方法已经解决。
原因可以从vs2010的几个规则说起:
规则一:vs2010认为项目页面都有前台页和后台页,执行严格的code behind模式。
规则二:vs2010认为部分项目页面不需要前台页面。
如:一般处理程序页面(Handler.ashx)、web服务页面(Webservice.asmx),他们在vs里显示有,但是你一打开就成了Handler.ashx.cs和Webservice.asmx.cs
规则三:vs2010认为网站不需要执行严格的code behind模式。
规则四:vs2010认为项目和网站子文件兼容。
总的来说,这应该是个BUG,是微软的规则冲突而引起的奇怪现象。