有一个asp.net应用,当它作为虚拟目录发布到IIS的时候,一切正常;当它作为网站发布到IIS的时候,它所有的表单都提交不了了,按钮按上去没有任何反应。
使用ieHTTPHeaders工具查看,发现点击按钮后没有发送任何消息给服务器端,初步确定应该是前台的问题,很可能是js的问题。检查了页面源代码,其本身的js应该不存在什么问题。于是打开ie的脚本调试程序,在form的onsubmit函数内加入断点:
js 代码
- οnsubmit= "if (!ValidatorOnSubmit()) return false;"
js 代码
- function ValidatorOnSubmit() {
- if (Page_ValidationActive) {
- return ValidatorCommonOnSubmit();
- }
- return true ;
- }
执行到
js 代码
- function ValidatorCommonOnSubmit() {
- event.returnValue = !Page_BlockSubmit;
- Page_BlockSubmit = false ;
- }
发现它没有返回,相当于返回false,因此导致onsubmit返回false。
仔细检查了下,发现该应用下有一个目录aspnet_client\system_web\1_1_4322,正常情况下这个目录应该是在iis的根目录Inetpub\wwwroot下,在Inetpub\wwwroot下的WebUIValidation.js里该方法的代码为:
js 代码
- function ValidatorCommonOnSubmit() {
- var result = !Page_BlockSubmit;
- Page_BlockSubmit = false ;
- event.returnValue = result;
- return result;
- }
而该应用下的WebUIValidation.js则为上面没有返回语句的代码。
js 代码
- "javascript" type= "text/javascript" src= "/aspnet_client/system_web/1_1_4322/WebUIValidation.js" >
这样原因就很清楚了,当该应用作为虚拟目录发布的时候,页面引用的js是iis目录下的正确的js文件,所以不会有问题;当该应用作为网站发布的时候,页面引用了错误的js文件,因此无法提交。不清楚原作者为什么把aspnet_client\system_web\1_1_4322这个及其下面的文件放在应用里面,导致这个错误。