我有一些JavaScript在我的網頁之一,避免用戶雙擊窗體上按鈕,並在異步回發導致雙提交問題:null元素ID爲DataGrid的ButtonColumns
var prm = Sys.WebForms.PageRequestManager.getInstance(); prm.add_initializeRequest(InitializeRequest); prm.add_endRequest(EndRequest);
var btn;
function InitializeRequest(sender, args) {
document.body.style.cursor = "wait";
var btnId = args._postBackElement.id;
btn = document.getElementById(btnId);
if (btn != null && (btn.type == "button" || btn.type == "submit"))
btn.disabled = true;
}
function EndRequest(sender, args) {
document.body.style.cursor = "default";
if (btn != null) btn.disabled = false;
}
這不適用於DataGrid ButtonColumns。 document.getElementById(btnId)爲那些返回null。
如果我使用TemplateColumn並把一個Button控件裏面,那很好。
望着那獲取呈現DataGrid的HTML,我可以看到,ASP.NET不輸出爲ButtonColumn,如果它確實爲TemplateColumn中內按鈕做一個onclick:
ButtonColumn :
<input type="submit" name="ctl00$placeholderContent$dgCommittees$ctl03$ctl00" value="Edit" />
按鈕在TemplateColumn中:
<input type="submit" name="ctl00$placeholderContent$dgCommittees$ctl03$cmdDelete" value="Delete" onclick="return confirm('Are you sure you wish to delete this committee?'); WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions("ctl00$placeholderContent$dgCommittees$ctl03$cmdDelete", "", true, "", "", false, false))" id="ctl00_placeholderContent_dgCommittees_ctl03_cmdDelete" />
顯然是「我如何使這項工作?」的答案。是簡單地用TemplateColumns中的按鈕替換我所有的ButtonColumns。
我很好奇,如果有人知道爲什麼雖然ASP.NET以這種方式呈現ButtonColumns,並且如果有一些方法可以使它們呈現與按鈕相同的方式。