• 締切済み

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へリダイレクトしません。 対処方法を教えて頂きたく思います。

みんなの回答

noname#158371
noname#158371
回答No.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例外は発生しないんじゃないかと思います。 ご確認下さい。

参考URL:
http://www.microsoft.com/japan/msdn/community/gdn/ShowPost-16129.htm
B_Taka-B
質問者

お礼

ありがとうございました。