2013-02-22 19 views
5

Próbuję utworzyć stronę z komunikatem o błędzie, aby wyświetlić wyjątek, gdy wystąpi wyjątek, a na stronie z komunikatem o błędzie znajduje się przycisk powrotu, aby wrócić do poprzedniej strony. wyjątek spowodowany.sposób postępowania z komunikatem o błędzie: Stan sesji nie jest dostępny w tym kontekście

oto kod służący do przekierowania strony błędu.

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

oto kod dla mojego pliku 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"); 
} 

Oto kod na stronie 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"); 
    } 

Kiedy klikam przycisk przypisywać, to otwiera stronę errorMessage i wyświetlić wyjątek, ale gdy klikam przycisk RETURN, program rozbił się i wskazał na plik Global.asax i mówi Stan sesji nie jest dostępny w tym kontekście, jak pokazano w dmuchu. enter image description here

Nie rozumiem dlaczego sesja ["wyjątek"] Null. będzie bardzo docenione, jeśli ktoś odpowie na moje pytanie. Dzięki.

Odpowiedz

1

Zamiast wiersza kodu, który znajduje się wewnątrz Twojego znajomego:

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

pozbyć się tego całkowicie, a w kodzie HTML swojego przycisku, dodaj ten wiersz kodu:

PostBackUrl="insert your path here" 

Dlatego powinien powrócić do strony, którą zacząłeś.

+0

dobrze, tak. to działa. Dziękuję bardzo. – mrqyue

6

próbujesz uzyskać dostęp do stanu sesji w zdarzeniu błędu aplikacji, gdy może to oznaczać, że obiekt sesji nie jest inicjowany. błąd może zostać zgłoszony w innej lokalizacji, ponieważ dotyczy całej aplikacji.

Zazwyczaj dzieje się tak, gdy zgłaszany błąd występuje na początkowych etapach aplikacji, aby obiekt sesji nie został zainicjalizowany.eg. w zdarzeniu Begin_Request.

Można wykonać zerowanie przed uzyskaniem dostępu do obiektu sesji.

tj

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

Podczas definiowania stronę błędu w pliku web.config, następnie w stronę błędu można uzyskać dostęp do wyjątku (y) tutaj:

HttpContext.Current.AllErrors 

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/ErrorPage.aspx"> 
</customErrors> 
Powiązane problemy