ASP.NET Event Validation Hatası ve Çözümü

Merhaba Arkadaşlar,

Bu yazımda Event Validation hakkında biraz örnekleme yapacağım. Şimdi öncelikle şu konudan bahsetmek istiyorum. ASP.NET’te Web Form’lar üzerinde her kontrolün bir View State’i vardır yani o anki kontrolün son durumunu tutan bir veri. Kontrolün içerisini Javascript ile değiştirebiliriz ve bu durum server’a yansımaz yani server bu durumdan habersizdir ve kod tarafında değişiklikler yansımaz. Sayfaya postback yaptığımız anda Event Validation hatası alırız ve bunun çözümü ya Event Validation’u kapatmaktan geçer yada kontrolü server’ın haberi dahilinde update ederiz. Event Validation’un kapatılması güvenlik açısından sıkıntılar yaratabilir. Bu yüzden yaptığımız hatayı düzeltmek en mantıklı yöntemlerden.

 

Ben kendi örneğimde kendi yaşağıdım sorun ve kaynak kodlarının bir kısmını burada paylaşacağım. Senaryoda bir DropDownList’im var ve bunu jQuery ile client tarafında güncellemekteyim. Bunun ardından sayfaya herhangi bir postback işlemi yaptığımda Event Validation hatası almaktayım. Hata aynen aşağıdaki gibi:

Invalid postback or callback argument. Event validation is enabled using in configuration or <%@ Page EnableEventValidation=”true” %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Bu arada aklıma gelmişken Custom DropdownList ASP.NET kontrolü oluşturarak bu sorundan da kurtulabiliyorsunuz. Yani inheritance kullanarak sorun karşılaştığınız kontrolün sadece belirlenen özelliklerinizi yeni sınıfınıza aktarmış oluyorsunuz ve sorun yaşanılan annotation’u belirtmeden Event Validation sıkıntısından kurtulmuş oluyorsunuz fakat dikkatinizi çekmek istiyorum bu çözüm de güvenlik sorunu teşkil etmektedir. Neyse biz kendi çözümümüze devam edelim. Öncelikle sorunu teşkil eden javascript satırını sizinle paylaşmak istiyorum.

Satırı biraz anlatacak olursak bir DropdownList’imiz var ve buna her seferinde jQuery ile option ekliyoruz ve sunucunun bundan haberi yok yani bunu client side’da yapıyoruz bunun sonucunda sayfaya bir postback işlemi sırasında yukarıda paylaştığım hatayı almamız muhtemel. Hemen workaround’a gelelim. Öncelikle DropDownList’imizi bir UpdatePanel’in içerisine alıyoruz ve onu güncelleyecek gizli bir buton’u yanına eklyoruz ve Click Event’ini de oluşturuyoruz ve karşımıza aşağıdaki gibi bir kod parçacığı çıkıyor.

Hemen Click Event’imizi yazıyoruz:

Burada bir açıklamada bulunayım burada Dropdown item’ları ‘;’ ile ayrılacak ve split ile bunları ayıracağız ardından DropdıwnList’in içerisine ekleyeceğiz. Hemen ardından yukarıda verdiğim javascript kodunu tamamen aşağıdaki ile değiştiriyorum:

Burada da bir açıklamada bulunmak istiyorum. Ben WebServis’ten JSON aldım ve bunu parse edip kullandım siz each döngüsünü değiştirebilir ve kendi isteklerinize uygun bir şekilde kullanabilirsiniz. Fakat benim değinmem gereken en önemli nokta __doPostBack metodu. Bu metod ile UpdatePanel içerisindeki buton’a postback yapmış oluyoruz ve haliyle panel içerisindeki bütün veriler click event’i ile güncellenmiş oluyor.

Umarım faydalı olabilmişimdir. Bir sonraki yazımda görüşmek üzere 🙂

 

 

 

 

 

 

Bu yazı Yazılarım kategorisine gönderilmiş ve , , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.

ASP.NET Event Validation Hatası ve Çözümü için 1 cevap

  1. Hakikaten çok güzel anlatmışınız. Ne zamandır aradığım bir konu idi çok makbule geçti teşekkürler. 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir