具體情況如下:
Asp.net AJax 的腳本都是封裝成vxd文件(一種IHttpHandle的實現,ASP.Net本身的腳本也是采用這種方式實現的),我們在頁面上可以看到類似於如下的腳本引用:
ASP.Net的腳本引用
<script src="/ADCAdminPortal/WebResource.axd?d=oaHQugHLcngT9QBb6bqlOQ2&t=632980334575156250" type="text/Javascript"></script>
ASP.Net AJax 的腳本引用
<script src="/ADCAdminPortal/ScriptResource.axd?d=yvZpRQrDbxpfjwZQ-SD6d59FTbTz2nfeQMLt1bp5Av-9SkGCaXBfqf0HVEgduxP2f6U7UUs1yT2Gh7BsFIoKYNnXT56B5pflXKy3iFKZUFL-PFKULAHEYgZH4c-KK2T3R8gdXVYECnCzMt0XRtk7TB9ydna4LCyYoh_WttSxiho1&t=632992694620822500" type="text/Javascript"></script>
<script src="/ADCAdminPortal/ScriptResource.axd?d=yvZpRQrDbxpfjwZQ-SD6d59FTbTz2nfeQMLt1bp5Av-9SkGCaXBfqf0HVEgduxP2f6U7UUs1yT2Gh7BsFIoKYNnXT56B5pflXKy3iFKZUFL-PFKULAHEYgZH4c-KK2T3D4Nw9sGEQEXOmb5pILf4ACll48eLd5fNcjH_mOdiJtM1&t=632992694620822500" type="text/Javascript"></script>
當需要身份驗證時,未登錄前,對web站點的任何文件的訪問都將被拒絕。 而一般的網站都有一部分頁面是不需要SFZ驗的,如:首頁,新聞頁面,登錄頁面,等等。 所以,網站的Sys未定義錯誤就出現了。將 axd文件定義為無需驗證後,該錯誤徹底解決。
<location path="ScriptResource.axd">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
另外需要注意的是,在使用vs 2005自帶的web ServIEr中所有文件都會被ASP.Net 解析,在未登錄的頁面圖片無法顯示也是由此原因造成的。
我認為90%的ASP.Net Ajax的 Sys未定義 錯誤是由此造成的。在作了以上配置後,問題都能解除。在之後的某個發布到IIS的版中,仍然出現過一次腳本錯誤,最後檢查發現仍然是由於 AJax中的腳本資源未解析造成的。檢查IIS中的配置無誤後,將虛擬目錄刪除,重建後,問題消失。
提示:
ASP.net AJax的腳本錯誤基本都是由於腳本資源文件vxd無法解析造成的。 如果出現腳本錯誤,先查看IE中頁面的Html源碼,將<scipt>腳本引用中的src 值全部copy下來,直接放入IE的地址欄進行訪問,如果能解析為腳本文件(提示下載),則表示解析成功,如果不能下載,表示vxd無法解析,原因一般都是SFZ驗證造成的。如果僅僅出現一年白底黑字的 “無法找到網頁” 的IIS錯誤頁面,那就與asp.net無關了,有可能是IIS未解析vxd文件,可以檢查IIS的默認擴展名解析配置是否被改動過。如果沒有改動過,將虛擬目錄重建。要不然就在IIS中重新注冊ASP.Net.