解決 ASP.NET 無法 postback(一點通系列 - MVP 撰寫)

關於作者:

本文由微軟最有價值專 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 回去囉。

問題的解決方法

  1. 在 B 主機執行以下指令,修復 .net framework: 

    "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe" –i

  2. 然後再用 "net start w3svc" 重啟網站服務就 OK 了。

請讓我們知道

還滿意我們寫的內容嗎?無論您是遇到了以下任何一種情況:
「太好了!問題解決了。」
「問題沒有解決,我有更好的建議。」
都歡迎您利用本篇文章底部的意見調查表,寫下您寶貴的意見。也期待您的鼓勵,讓我們為您創造更多實用的技術文章。

需要更多協助?

擴展您的技能
探索訓練
優先取得新功能
加入 Microsoft 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

×