[英]Dictating Save Order of Controls in VB.Net
我有一個包含占位符的父頁面。 包含IFrame的跨度元素會添加到此占位符,因為需要新的IFrame。 每個IFrame都包含一個ASP控件。 父級具有以下代碼,在父頁面的onClick上觸發:
function saveAll() {
for (i = 0; i < frames.length; i++) {
for (j = 0; j < frames[i].length; j++) {
if(frames[i][j] != null && frames[i][j] != ''){document.getElementById(frames[i][j].toString()).contentWindow.Save();}
}
}
}
會在每個控件中調用保存功能,從而觸發按鈕單擊,從而觸發該特定控件的服務器端保存功能。 對於試圖在30秒內閱讀此內容的人...可能發現前一句令人困惑...因此希望可以澄清這里的大局:
我遇到的問題是,盡管幀已排序,但服務器仍在無序處理控件。
上述javascript中的frame對象是一個2D數組,其組織方式如下:
鏡框
[[controlA_instanceA,controlA_instanceB,controlA_instanceC],
[controlB_instanceA,controlB_instanceB],
[controlC_instanceA,controlC_instanceB等],
[等等]]
循環,子控件的觸發以及frames數組都正常工作(因此,為什么我在這里沒有顯示代碼)。 但是,有人可以向我指出如何執行服務器處理控件的順序的正確方向嗎?
您的控件需要分配一個序列號。 然后,保存所有內容的第一步將是將2D數組分解為由序列號組成的1D數組。
將項目添加到框架數組時,需要將它們添加為具有兩個成員的對象:
var seqNo = 0; // at some point early in the script
...
frames[x][y] = {frame: (iFrame), sequence: seqNo}; //When the Control is added
seqNo++;
其中(iFrame)
是框架的ID。
然后,您的全部保存功能將如下所示:
function saveAll() {
var iFrames = [];
for (i = 0; i < frames.length; i++)
{
for (j = 0; j < frames[i].length; j++) {
if(frames[i][j] != null && frames[i][j] != '')
{
iFrames.push(frames[i][j]);
}
}
}
iFrames.sort(function(a,b){ return a.sequence - b.sequence});
for ( t = 0; t < iFrames.length; t++)
{
document.getElementById(iFrames[t].frame.toString()).contentWindow.Save();
}
}
這樣,您可以確保保留順序,因為您已按序列號對數組進行了排序。
就是說,問題可能在於數組似乎已排序,但不是,並且也未假設問題是服務器響應單擊事件的順序。
編輯:
如果服務器對事件的響應不正常,則可能需要其他方法。
如果這是一個Ajax網站,並且您要通過Web方法回發,那么我建議創建一個新的Web方法,該方法將數組作為參數。
將所有要保存的內容推入數組,然后將其傳遞回服務器以特定順序進行處理。
如果這是經典表單網站,則可以在頁面加載事件中處理自定義回發。
無論哪種方式,聽起來您都需要重新評估其處理方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.