2011-06-23 17 views
7

Próbuję wyświetlić komunikat wyjątku za pomocą pola alertu javascript.Wyświetlenie komunikatu wyjątku przez alert javascript w asp.net

Oto przykładowy kod.

public static void HandleException(Page page, Exception ex) 
{ 
    string message = ex.Message.ToString(); 
    ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "", "alert('"+message+"');", true); 

} 

Działa, jeśli podaję wartości literalne dla zmiennej łańcuchowej. np.

string message = "Hello World"; 

Ale zawiedzie, jeśli dam komunikat = ex.Message;

Każdy pomysł?

+0

* "Ale zawiedzie, jeśli podam komunikat = ex.Message;" * Fails *** how ***? –

+0

Mam na myśli, że pole alertu się nie wyświetla. Pojawia się tylko wtedy, gdy zmienna komunikatu ma literalny ciąg – rdp

+0

Założę się, że gdzieś jest komunikat o błędzie. Sprawdź konsolę JavaScript w przeglądarce. –

Odpowiedz

13

Trzeba go zakodować, na przykład za pomocą JavaScriptSerializer bo jeśli wiadomość zawiera kilka znaków ewakuacyjnych jak ' lub " to na pewno złamać javascript:

var message = new JavaScriptSerializer().Serialize(ex.Message.ToString()); 
var script = string.Format("alert({0});", message); 
ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "", script, true); 
+1

Potrzebowałem zmodyfikować funkcję biblioteki, która zwróciła pierwszą linię, ponieważ skrypty były już budowane na wszystkich stronach. Zauważyłem, że przycinanie cytatów jest pomocne, ponieważ serial Serialize dodaje cytowane cytaty: nowy JavaScriptSerializer(). Serialize (ex.Message.ToString()). Trim ('"'); – TTT

1

Czy Twoje ex.Message mają żadnych "znaków w nim? Mogą potrzebować ucieczki.

2
try  
{  
    //do some thing  
}  
catch (Exception ex) 
{  
    Response.Write("<script language='javascript'>alert('" + 
     Server.HtmlEncode(ex.Message) + "')</script>");  
} 
Powiązane problemy