我有一個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-窗口上點擊按鈕) –