我有一个asp应用程序与c#后端问题,我正在寻求一些指导。使用会话变量循环处理
我有一个webform,需要两个数字,一个起始号码和一个结束号码,并将其拆分为20个块,将开始号码和结束号码分配给每个块的会话变量,然后将会话变量传递给一个asp页面进行进一步处理,每次只有一个20(或更少)的块。
看来循环迭代直到最后一次,然后推出命令,到那时我的会话变量已被覆盖到'最后一批'。
预期的操作是批量73(例子),将打开4个窗口,其中1-20与第一个会话呼叫,21-40与第二个会话呼叫,41-60与第三个会话呼叫,以及61-73为最后一个会话呼叫,在每个循环直到每个批次打开一个新的浏览器窗口。现在,我得到4个窗口,但每个窗口只有最后61-73批次。
我确实认为这是正常的循环行为,但反正有它吗?
代码示例:
int[] serialArray = Enumerable.Range((Convert.ToInt32(startNum.Text)), 1 +
(Convert.ToInt32(endNum.Text) - Convert.ToInt32(startNum.Text))).ToArray();
bool keepGoing = true;
int index = 0; //starting array number
int endArray = serialArray.Length; //modifying array limit
int yyy = 19; //end array number
while (keepGoing)
{
int[] smallArray = serialArray.Skip(index).Take(20).ToArray();
if (endArray <= 20)
{
reportPopper(serialArray[index], serialArray.Last());
}
else
{
reportPopper(serialArray[index], serialArray[yyy]);
}
if (smallArray.Count() >= endArray)
{
keepGoing = false;
}
endArray -= smallArray.Count();
index += smallArray.Count();
}
则:
protected void reportPopper(int a, int b)
{
int startNumber = a;
int endNumber = b;
Session["SerialStart"] = startNumber; //batch index start
Session["SerialEnd"] = endNumber; //batch index end
string redirect = "<script>window.open('PrintBatchReport.aspx');</script>";
Response.Write(redirect);
}
这不是页面生命周期的工作方式。你实质上是在等待4个'window.open'调用而不告诉他们要处理什么。您需要为每个重定向生成唯一的会话变量,并将它们传递给'window.open',以便处理正确的批处理。 – mjw
为什么不在查询字符串中传递'SerialStart'和'SerialEnd'?然后每个窗口都可以有自己的范围,因为每个窗口都有自己的URL。 –
我建议给他们链接打开所有的四个窗口,如[在一个按钮上点击打开两个弹出窗口?](https://stackoverflow.com/questions/11535048/how-to-open-two-popup-窗口上点击按钮) –