2013-02-22 10 views
5

例外が発生したときに例外を表示するエラーメッセージページを作成しようとしていますが、エラーメッセージページに戻るボタンがあり、例外が発生しました。エラーメッセージを処理する方法:このコンテキストではセッション状態は使用できません

エラーページをリダイレクトするためのコードです。

protected void btnAssign_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     SqlDataSource3.Insert(); 
    } 
    catch (Exception ex) 
    { 
     Session["Exception"] = ex; 
     Response.Redirect("~/ErrorMessage.aspx", false); 
    } 
} 

ここに私のGlobal.asaxファイルのコード

void Application_Error(object sender, EventArgs e) 
{ 
    // Code that runs when an unhandled error occurs 
    Exception ex = Server.GetLastError().InnerException; 
    Session["Exception"] = ex; 
    Response.Redirect("~/ErrorMessage.aspx"); 
} 

ここでは、ErrorMessageのページのコードです。私はアサインボタンをクリックすると

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Exception ex = (Exception)Session["Exception"]; 
      Session.Remove("Exception"); 
      Literal1.Text = "<p style='color:blue'><b>An unrecoverable error has occurred:</b></p><br /><p style='color:red'>" + ex.Message + "</p>"; 
     } 
    } 
    protected void btnReturn_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("~/IncidentAssignment.aspx"); 
    } 

、それはErrorMessageのページを開き、例外を表示するが、私は戻るボタンをクリックすると、プログラムがクラッシュして、ファイルをGlobal.asaxのために指摘してセッション状態が、この中では使用できませんと言います文脈は、吹き飛びに示されている。 enter image description here

なぜセッション["例外"]がNullであるのか分かりません。もし誰かが私の質問に答えてくれたら大変感謝しています。ありがとう。

答えて

1

代わりに、あなたの内側に配置されたコードの行を使用しての:

protected void btnReturn_Click(object sender, EventArgs e) 
{ 
    Response.Redirect("~/IncidentAssignment.aspx"); 
} 

は完全にそれを取り除くと、あなたのボタンのHTMLコードでは、コード行を追加しなさい:

PostBackUrl="insert your path here" 

したがって、開始したページに戻る必要があります。

+0

、ええが。できます。どうもありがとうございます。 – mrqyue

6

セッションオブジェクトが初期化されていない可能性があるアプリケーションエラーイベントでセッション状態にアクセスしようとしています。エラーは、アプリケーション全体を参照しているため、アプリケーションの他の場所でスローされる可能性があります。

これは一般に、セッションオブジェクトが初期化されないように、アプリケーションの初期段階で発生したエラーが発生した場合に発生します。 Begin_Requestイベントで発生します。

セッションオブジェクトにアクセスする前にヌルチェックを行うことができます。

if (HttpContext.Current.Session != null) { //do your stuff} 
0

すなわち

あなたのweb.configファイルにエラーページを定義し、 は、エラーページにあなたはここで例外(複数可)にアクセスすることができますだけでなく

HttpContext.Current.AllErrors 

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx"> 
</customErrors> 
関連する問題