事情是這樣的,因為要進行主機轉移,這兩台主機分別為A主機和B主機,所安裝的Framework都是1.1,轉移時不小心將A主機C:\Inetpub\wwwroot\aspnet_client\system_web\1_1_4322下的檔案複製到另外B主機。轉移過去後,發現B主機的ASPX的程式,點Submit後不會觸發postback的Javascript。
追蹤後發現兩台主機的.net Framw work版號(各FW版號)不同,因此在postbac所呼叫的function是不同的,以下明顯看出A和B主機裡的WebUIValidation.js內容並不同:
1. A主機
//Main.aspx(FW:1.1.4322.573)
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
ValidatorCommonOnSubmit();
}
}
//../1_1_4322/WebUIValidation.js
function ValidatorCommonOnSubmit() {
event.returnValue = !Page_BlockSubmit;
Page_BlockSubmit = false;
}
2. B主機
//Main.aspx (FW: 1.1.4322.2443)
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
return true;
}
//../1_1_4322/WebUIValidation.js
function ValidatorCommonOnSubmit() {
var result = !Page_BlockSubmit;
Page_BlockSubmit = false;
event.returnValue = result;
return result;
}
3. B主機(複製了A主機的WebUIValidation.js後)
//main.aspx
function ValidatorOnSubmit() {
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();//這邊需要return value
}
return true;
}
//WebUIValidation.js
//但這裡卻沒回應值
function ValidatorCommonOnSubmit() {
event.returnValue = !Page_BlockSubmit;
Page_BlockSubmit = false;
}
以上(3)是我們將A主機的WebUIValidation.js複製到B主機後的內容,B主機的main.aspx進行submit後呼叫ValidatorCommonOnSubmit,ValidatorCommonOnSubmit會return ValidatorCommonOnSubmit(),偏偏在WebUIValidation.js被蓋後, ValidatorCommonOnSubmit,不再return 值,便造成ValidatorOnSubmit裡return ValidatorCommonOnSubmit(),變成return 'undifined',javascript執行到這邊便會因錯誤而停住,當然無法往下postback回去囉。
解決的方法:
- 在B主機執行以下指令,修復.net framework:
"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe" –i
- 然後再用 "net start w3svc" 重啟網站服務 就OK了
沒有留言:
張貼留言