ASP.NET sayfalarında çalışma zamanında bazen kodlama hataları bazende sunucu işlemlerinden dolayı sıklıkla hata ile karşılaşırız. Bu gibi durumlarda kullanıcıya hata mesajını göstermek yada kullanıcının anlaması mümkün olmayan bir asp.net sayfasına yönlendirmek genel bir problemdir. Bu sorunu aşmak için AJAX yapısındaki ScriptManager kontrolünü kullanabiliriz.
UpdatePanel ve ScriptManagerın AsyncPostBackError eventinden faydalanarak sayfada oluşan hatalarda kullanıcıya hata mesajı göstermemiz mümkün.
Örneğin;
<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" EnablePageMethods="True" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click1" Text="Tıkla" />
</ContentTemplate>
</asp:UpdatePanel>
<br />
</div>
burada dikkat ederseniz ScriptManagerın OnAsyncPostBackError client side eventinı ScriptManager1_AsyncPostBackError eventına yönlendiriyoruz. Bundan sonra tek yapmamız gereken bir hata yaratıp ScriptManager1_AsyncPostBackError eventını kullanarak hatayı kullanıcıdan gizleyerek Kullanıcıya basit bir hata mesajı göstermek.
Öncelikle Button1_Click eventı ile bir hata oluşturuyoruz.
protected void Button1_Click1(object sender, EventArgs e)
{
string[] dizi = new string[2];
dizi[0] = "birinci eleman";
dizi[1] = "ikinci eleman";
dizi[2] = "üçüncü eleman";
}
gördüğünüz gibi 2 elemanlı bir dizide eleman sayısı sınırının üstüne çıktık. Bu durumda IndexOutOfRangeException çalışarak hata verecektir. Biz bu hatayı ScriptManager1 in yakalamasını sağlayarak kendimize göre yönlendirmek için.
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager1.AsyncPostBackErrorMessage = "bir hata olustu";
}
kod bloğunu kullanabiliriz. Böylelikle kullanıcı sayfada herhangi bir hata oluştuğunda standart hata mesajımızla karşılaşacaktır. Veya kullanıcıyı Response.Redirect("hata.aspx"); ile genel bir hata sayfasına yönlendirebiliriz.
Aynı yapıyı Masterpage içerisinde kullanarak daha genel bir hale getirebileceğimiz gibi. ScriptManager1 kontrolünün AsyncPostBackErrorMessage propertysine herhangi bir mesaj yazdığınızda AsyncPostBackError eventini yazmanıza gerek kalmayacaktır.
ScriptManager1_AsyncPostBackError mesajı içerisinde hata mesajının detaylarını e.Exception.Message diyerek string türünde elde edebilirsiniz.