2011年11月14日

解決ASP.NET無法postback

事情是這樣的,因為要進行主機轉移,這兩台主機分別為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回去囉。



解決的方法:




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

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




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


沒有留言:

張貼留言