繁体   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