簡體   English   中英

在VB.Net中指示控件的保存順序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM