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