webForumDet fria alternativet

Felhantering pressentera för anv

.NET

7 svar · 643 visningar · startad av cok

Medlem sedan dec. 2005664 inlägg
Frågan#1

Hallå,

Sitter och funderar på hur man snyggast kan pressentera att fel har uppstått för användaren.

Jag skulle helst av allt vilja att ett felmeddelande sätts överst på sidan och att resterande sida renderas ut som den var innan postback.

Jag har en basklass smo alla mina sidor ärver av och i denna testar jag att köra med:

protected override void OnError(EventArgs e)
{
    HttpContext ctx = HttpContext.Current;

    Exception exception = ctx.Server.GetLastError();

    string errorInfo = "FEL";

    ctx.Response.Write(errorInfo);
    ctx.Server.ClearError();

    base.OnError(e);
}

Detta resulterar i att "FEL" skrivs ut. Hur kan jag lösa så att resterande skrivs ut?

Medlem sedan dec. 20014 239 inlägg
#2

Lite OT: Varför inte använda egna felsidor istället?

Medlem sedan dec. 2005664 inlägg
#3

Smaken är som baken, tror användaren i detta fallet hade kännt sig mer hemma med ett "felmeddelande" överst på sidan.

Medlem sedan maj 20012 812 inlägg
#4

cok skrev:

Detta resulterar i att "FEL" skrivs ut. Hur kan jag lösa så att resterande skrivs ut?

Det tror jag inte du kan, för när det kastas ett exception så avbryts exekveringskedjan och man börjar "rulla tillbaka stacken" för att se om du har en try-catch någonstans, och om du har det så förtsätter man exekveringskjedjan därifrån.

Så om du inte gör fångar felet och behandlar det själv, så kan du inte göra det du vill. Med andra ord, vill du göra så som du önskar, så kan du skippa OnError() metoden eftersom när den körs så kommer inte resterande del av sidan att exekveras.

Dessutom är det ett FET NO NO att använda sig av Response.Write i ASP.NET eftersom det, precis som du säger, kommer att skrivas ut överst på sidan, du kan alltså inte styra var du vill ha det.

För att åstakomma det du är ute efter så måste du fånga alla felen och skriva ut dessa till en label som du har överst på sidan, som givetviss är Hidden i vanliga fall. Och sedan fortsätta exekveringen efter det att du fångat felet. Det är dock inte en lösning som jag skulle rekomendera, eftersom du faktiskt inte vet om du kan fortsätta din exekvering av sidan, eftersom resterande exekvering kanske behöver din information som skulle skapas när ditt första exception kastades.

- M

Medlem sedan dec. 2005664 inlägg
#5

Tack Gladh,

Jag testar att köra med en error sida som jag kan pressentera feltext och logga detta.

Medlem sedan dec. 2005664 inlägg
#6

Fortsätter i denna tråd..

När jag kör koden i debugläge så skickas användaren till olika felsidor.

Men när jag kör koden på produktionsserver med IIS så skickas man till felsida (syns i adressfältet). Men man får inte det inte snyggt pressenterat.

Säg att jag försöker surfa till en sida som inte finns, då kommer jag till min "Sidanfinnsinte"-sida. Där kommer ett fult felmedddelande ala .NET:

Server Error in '/' Application.
--------------------------------------------------------------------------------

The resource cannot be found. 
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Error/Notfound.aspx

I min web.config har jag följande:

    <customErrors mode="On" defaultRedirect="Error/Error.aspx">
      <!--<error statusCode="500" redirect="/error/callsupport.htm"/>-->
      <error statusCode="404" redirect="/Error/Notfound.aspx"/>
     <!--<error statusCode="403" redirect="/error/noaccess.aspx"/>-->
    </customErrors>

Som sagt, i adressfältet står det att jag kommit till Notfound.aspx...

Medlem sedan dec. 20014 239 inlägg
#7

Och i katalogen Error har du lagt in sidan Notfound.aspx som du skapat för att presentera ett alternativ felmeddelande?

Medlem sedan dec. 2005664 inlägg
#8

Nevermind... såg att det var fel adress i adressfältet. Sorry!

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)