關於作者:
本文由微軟最有價值專 MVP 高榮章 提供。微軟十分感謝 MVP 主動地將他們的經驗與上百萬名其他技術使用者交流。MVP 高榮章同時也將此篇文章放在他的部落格內,歡迎您按 此處 瀏覽 MVP 高榮章更多的技術文章、經驗分享與觀點。
問題的來龍去脈
事情是這樣的,因為要進行主機轉移,這兩台主機分別為 A 主機和 B 主機,所安裝的 Framework 都是 1.1,轉移時不小心將 A 主機 C:\Inetpub\wwwroot\aspnet_client\system_web\1_1_4322 下的檔案複製到另外 B 主機。轉移過去後,發現 B 主機的 ASPX 的程式,點 Submit 後不會觸發 postback 的J avascript。
問題的發生原因
追蹤後發現兩台主機的 .net Framw work 版號不同,因此在 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
//但這裡卻沒return值
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 了。
請讓我們知道
![]() |
還滿意我們寫的內容嗎?無論您是遇到了以下任何一種情況: |