2010-06-10 19 views
5

Desteklediğim bir uygulamada yeniden işlem yapmayı ve hata işlemeyi basitleştirmeyi düşünüyorum. Şu anda yarattığımız bir temel sınıftan miras kalan tüm sayfalarımız var, ki bu da açıkça System.Web.UI.Page'den miras alıyor. Bu temel sınıfta, OnError yöntemi şu anda geçersiz kılmakta ve buna karşılık MyBase.OnError çağrısı yapılarak özel günlüğe kaydetme yöntemlerinden birini çağırmaktadır.OnError'ı ne zaman geçersiz kılarsınız?

OnError yöntemini geçersiz kılmanın herhangi bir yarar görmüyorum ve Global.asax'daki Application_Error yönteminin işlenmemiş özel durumu (günlüğe kaydetme) ve ardından customErrors bölümüne bakmasına izin vermenin daha iyi olacağını düşünüyorum. Yapı, kullanıcıyı yönlendirmek için bir işlemi tetikler.

Online görünüyor, insanlar bu yöntemi sık sık geçersiz kılıyor, ancak bir gereksinim görmüyorum ve MSDN'den this makalesi beni düşünmemi sağlıyor.

cevap

2

Özel bir sınıf olarak adlandırılan PageBase oluşturun:

public class PageBase : Page 
{ 
    protected override void OnError(..) 
    { 
    //handle error, redirect to error page 
    } 
} 

Ve bu yüzden sadece bir kere yapmak zorunda ve hataları işlenmeyen yakalamak ve hata sayfasına yönlendirme için kullanabilirsiniz. Bu şekilde bir kez yapmak zorundayım; Page.Error olayının uygulama hatası üzerinde herhangi bir artıları veya eksileri olduğunu bilmiyorum; ancak sayfa hatasını buradaki uygun olabileceğinden kullanıyorum; Hatayı temizleyebilir ve sayfa bağlamında hata sayfasına yönlendirebilirim ... kişisel tercihim.

MSDN bağlantısı için teşekkürler; Bu oldukça iyi bir kaynaktı.

HTH.

+0

Ama: Ayrıca

, bunu sorunuzun bir parçası değil biliyorum ama hata günlüğü için ELMAH bakar mısın? Sayfa bağlamındaki bilgileri ele almanız gerekiyorsa, neden bu bağlamdaki hatayı işlemek istediğinizi anlıyorum (sayfa hakkındaki belirli verileri, kullanıcı girişlerini, ekrandaki mesajları görüntüleme vb.), Fakat neden geçersiz kılmalısınız? Page_Error veya Application_Error yerine mevcut OnError yöntemi? –

+0

page_error, onerror'dan kaynaklanır (Page_Load, OnLoad yöntemi, vb. Denir), bu yüzden OnError; Page_Error ile aynı ... Yani asıl soru, sayfa hatası vs. uygulama hatası neden ... –

+1

Yukarıda verdiğim bağlantı ile, "global.asax: Application_Error" bölümünün üzerindeki paragraf, OnError Geçersiz Kılma yöntemi, Page_Error kullanılarak aynı değildir. Dolayısıyla, sizin durumunuza göre, bu işlevin kendi başına yönlendirme yapmasını engelliyorsunuzdur, bu yüzden muhtemelen tamamdır. Benim durumumda, OnError yönteminde bu işlevsellikten herhangi birini geçersiz kılmıyoruz, atılan istisna hakkında çok genel bir giriş yapıyoruz. Günlüğe kaydetmeyi uygulama düzeyinde koyabileceğimizi ve OnError yöntemimizi kaldırabileceğimizi düşünüyorum. Girdiniz için teşekkürler. –

0

Uygulamanın yalnızca bazı sayfalarının temel sınıftan miras aldığı ve hataları başka şekilde ele alması gereken bir senaryo görebiliyordum. Diğer tüm hatalar, Application_Error

2

tarafından yakalanmaya/günlüğe kaydedilmeyecek. OnError yöntemini hiçbir zaman engellemedim. Global asax'ın Application_Error uygulamasını kullanmayı seviyorum, bu da temel sınıfınızdan miras kalmayacak sayfaları yakalayacaktır. Üstelik, bir işlevi geçersiz kılmak, işlevselliğini değiştirmek için kullanılır, bu yüzden bunu yapmazsanız, onu geçersiz kılmazdım. Yine, neden OnError yöntemini geçersiz,

http://code.google.com/p/elmah/

İlgili konular