- - PR -
【C#】画面遷移時にSession情報がうまく引き継げない
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-09 17:04
>囚人さん
引用: ------------------------------------------------------------------------ listData.Insert(listData.Count, row["ManageNo"].ToString()); ここなんですけど、何故 listData.Add(row["ManageNo"].ToString()); ではないのでしょうか? ------------------------------------------------------------------------------ listData.Countを指定してる意味は特にありません。 インデックスを付けといたほうが後で便利じゃないかと思ってです。 ところで、本件の原因がわかりました。 私の知識不足が原因ですが、説明に誤りがあったらご指摘ください。 実は画面BにはPage_Load時に一度だけリロード(Javascript)させる処理があります。 private void Page_Load(object sender, System.EventArgs e) { if (!IsPostBack) { // @一度だけリロード if ((Boolean)Session["ReLoadFlg"] == false) { Session["ReLoadFlg"] = true; str = string.Format("<script language=\"javascript\">location.reload(true);</script>"); Page.RegisterStartupScript(画面B,str) ; } // AArrayList配列のデータ件数を画面上に表示 Lbl_Debug.Text += ((ArrayList)Session["ListData"]).Count.ToString(); // BSession["ListData"]のデータ件数を減らす処理 XXXX(); } } 上記で私は、@を行ったらすぐに再度Page_Loadの先頭から行われると思ってたのですが、 実は@ABABと動いていたようで、私が確認してたデータ件数はBが処理された後の結果 であることがわかりました。 簡単に言うと、Javascriptで行っているリロードが行われると処理を中断して即再読込だと 思ってたのが、一旦最後まで処理されてたってことです。 お騒がせしてしまいましたが、いい勉強になりました。 皆さん、ありがとうございました。 | ||||
|
投稿日時: 2005-09-09 17:22
RegisterStartupScriptというのは、次にレスポンスを書き出す時にそのスクリプトを埋め込むという処理です。
それを呼び出したからといってJavascriptが実行されるわけではありません。 | ||||
|
投稿日時: 2005-09-12 10:28
なるほど、正確に言うとそういうことなんですか。。。
それなら今回の一件がすんなり納得いきます。 いつもMSのサイトを調べてはいましたが正確に理解するには難しいサイトなので だいたいで理解してました。 一郎さん、補足ありがとうございました。 | ||||
|
投稿日時: 2005-09-12 11:36
このロジックですと@が実行された場合は必ずAとBが実行されます。 もし@が実行された後に後続の処理(今回の場合AとB)をしたくないのであれば 明示的にResponse.Endなどで処理を打ち切ってあげる必要があります。 もしくはElseケースにAとBの処理を書いてあげるとか。 はずしてたらごめんなさい。 _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||
|
投稿日時: 2005-09-12 21:25
どこの記述を、どの様に理解していたが、実際にはこういうことだった。ここの記述がこのようであれば、理解しやすい。と、具体的に事例を挙げてフィードバックすると、反映されることがありますよ。 でも、今回の問題は、クライアントの処理とサーバーの処理という、Web アプリケーションの基本に関する理解不足のように思います。 _________________ | ||||
|
投稿日時: 2005-09-12 22:44
> でも、今回の問題は、クライアントの処理とサーバーの処理という、Web アプリケーションの基本に関する理解不足のように思います。
私も最初はそう思ったのですが、考え直すとそうとばかりも言い切れないんじゃないかと。 HttpResponse.Redirect の挙動と同様に、 「StartupScript を設定したのだから、即座にクライアントでそのスクリプトが動く」 と考えたのであれば、(正しくはありませんが)クライアントとサーバ間の切り分けに関しては間違っていないんじゃないかなぁ。 #こじつけ? |