- 締切済み
ASP.netにて質問です。
WEB開発が初心者でいろいろ悩んでいます。 ・ASP.net2.0 ・C# 現在、ログインページとメインページがあります。 今後、ページが増えていくので、 メインページ内で処理していたことを全ページで使用できるように APP_code配下へクラスを作成し、処理を移植しました。 そこで、メインページのaspx.csでは問題なく出来ていたが、APP_code配下のcsでは出来なくなってしました。 [内容] object ses = Session["hoge"]; ←この処理が出来なくなってしまったので、下記に変更 object ses = System.Web.HttpContext.Current.Session["hoge"]; ⇒結果は「NullReferenceExceptionはユーザーコードによってハンドルされませんでした。」 となってしまいます。 System.Web.HttpContext.Current.Session["hoge"]の結果はNullなのが問題だとは思うのですが、 元のaspx.csで実装されていた時はNullであっても特に問題はありませんでした。 また、Response.Redirect("hoge.aspx")についても System.Web.HttpContext.Current.Response.Redirect("hoge.aspx") と修正したが、hoge.aspxへリダイレクトしません。 対処方法を教えて頂きたく思います。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
私の環境では、 object ses = System.Web.HttpContext.Current.Session["hoge"]; のコードをApp_Code配下のクラスに記述しても例外エラーなく 処理できましたが、一般的には、現在動いているHttpContextや HttpSessionStateをApp_Codeに引き渡すやり方が一般的なので 下記のようにしたらどうなりますか? もちろん、そのApp_Codeに定義したクラス・コード類は、 aspxからアクセスして使用させてることが前提になりますが・・・ ■App_Codeの定義 public class Class1 { /// <summary> /// ASPXより処理中スレッドのHttpContextをもらってSession処理 /// </summary> /// <param name="context"></param> public static void SaveSession(System.Web.HttpContext context) { object ses = context.Session["hoge"]; } } ■App_Codeにあるコードを呼び出すaspxの例 public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Class1.SaveSession(this.Context); // staticメソッドにしてます } } これでやって頂ければ、処理中のContext(スレッド)を 引き渡して処理することになるので恐らく、NullReferenceException例外は発生しないんじゃないかと思います。 ご確認下さい。
お礼
ありがとうございました。