私はC#バックエンドでaspアプリケーションに問題があり、いくつかのガイダンスを求めています。セッション変数を使用したループ処理
私は開始番号と終了番号の2つの番号を取り、それを20のブロックに分割し、各ブロックのセッション変数に開始番号と終了番号を割り当て、セッション変数をASPに渡しますページを追加処理するために、一度に20(またはそれ以下)の1つのブロック。
最後にループが繰り返されてからコマンドがプッシュされるようですが、そのときに私のSession変数は '最後のバッチ'に上書きされています。
バッチ73の場合(例)、4つのウィンドウが開かれ、最初のセッションコールでは1〜20、2番目のセッションコールでは21-40、3番目のセッションコールでは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があるため、それぞれのウィンドウには独自の範囲があります。 –
[ボタンをクリックすると2つのポップアップウィンドウを開くにはどうすればいいですか?](https://stackoverflow.com/questions/11535048/how-to-open-two-popup-ボタンをクリックするとウィンドウに表示されます) –