Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript VB.Net中控件保存顺序的口述_Javascript_Asp.net_Vb.net - Fatal编程技术网

Javascript VB.Net中控件保存顺序的口述

Javascript VB.Net中控件保存顺序的口述,javascript,asp.net,vb.net,Javascript,Asp.net,Vb.net,我有一个包含占位符的父页面。 当需要新的iframe时,包含iframe的Span元素将添加到此占位符。 每个IFrame都包含一个asp控件。 父级有以下代码,单击父级页面时触发: function saveAll() { for (i = 0; i < frames.length; i++) { for (j = 0; j < frames[i].length; j++) { if(frames[i][j]

我有一个包含占位符的父页面。 当需要新的iframe时,包含iframe的Span元素将添加到此占位符。 每个IFrame都包含一个asp控件。 父级有以下代码,单击父级页面时触发:

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();}
            }
        }
    }
函数saveAll(){
对于(i=0;i
它在每个控件内调用一个save函数,然后单击按钮,从而为该特定控件启动服务器端save函数。对于那些试图在30秒内阅读此内容的人来说…前一句可能会让人感到困惑…因此希望这可以澄清这里的大局:

我遇到的问题是,尽管帧已被排序,但服务器仍在处理无序的控件

上述javascript中的frames对象是一个2D数组,其组织方式如下:

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();
    }
}

[[controlA_instanceA,controlA_instanceB,controlA_instanceC],
[controlB_instanceA,controlB_instanceB],
[controlC_instanceA、controlC_instanceB等],
[etc]]


循环、子控件的触发和帧数组都正常工作(因此我没有在这里显示代码)。然而,有人能告诉我如何强制执行服务器处理控件的顺序吗

您的控件需要指定一个序列号。然后,“全部保存”的第一步是将二维数组分解为按序列号组织的一维数组

将项目添加到帧数组时,需要将其作为具有两个成员的对象添加:

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();
    }
}
函数saveAll(){
var-iFrames=[];
对于(i=0;i
通过这种方式,您可以确保保留顺序,因为您按序列号对数组进行了排序

这就是说,问题可能是数组似乎已排序,但它没有排序,并且没有假设问题是服务器响应单击事件的顺序

编辑:

如果服务器响应的事件顺序不正确,则可能需要另一种方法

如果这是一个ajax站点,并且您通过web方法发回,那么我建议创建一个新的web方法,该方法将数组作为参数

将所有要保存的内容推送到阵列中,然后将其传递回服务器,以便按特定顺序进行处理

如果这是一个经典的表单站点,那么您可以在页面加载事件中处理自定义回发


无论哪种方式,听起来您都需要重新评估这一过程。

我衷心感谢您的回答!但是,我已经通过在每个控件的save子控件的开头放置断点来验证服务器是否确实以任意顺序响应。尽管客户端上的帧顺序正确,但断点的命中顺序是不同的。然后您需要对其进行稍微不同的处理。我建议将save预处理到一个数组中,并将对象作为一个大的分隔字符串发布回服务器。这将是确保数据按特定顺序排列的唯一方法。这很不幸。看起来我必须编写每个控件的save子控件,这样它就不会关心顺序(也就是说,使它独立于以前保存的数据)。我不能在不关闭浏览器的情况下完成一个大字符串。我唯一的另一个想法是使用javascript互斥体,但我对此有点害怕。想法?你是如何处理这些扑救的?它们是webmethods还是都是单发回发?我正在尝试建立范围,因为您有其他选择。我不确定您是否必须执行整个互斥,但您可能会实现一个队列。它们是单回发回的。