analiz et, tasarla, hayata geçir



UserControl, UpdatePanel ve RegisterPostBack Sorunu

ASP.NET AJAX ile gelen sorunlardan biri de UpdatePanel içerisinde bazı durumlarda ajax postback yerine full postback yapılması zorunluluğudur. Dosya yükleme veya Response.Write işlemlerinde UpdatePanel bize fazla destek olmamaktadır. Bu gibi durumlarda RegisterPostBack metodu yardımımıza koşar ve normal şartlar altında sunucuya asenkron postback yapması gereken kontrolün UpdatePanel içerisinde olsa bile full postback yapmasını sağlar.



ScriptManager.GetCurrent(Page).RegisterPostBackControl(Button1);

İlk başta harika çalışan bu metodun bir açığı vardır. Eğer FileUpload gibi bir kontrolümüz UserControl içerisinde bulunduğunda ve bu UserControl’ün görünürlüğü (visible) ilk başta kapalı olduğunda daha sonra açılsa bile ScriptManager kendi insiyatifini kullanarak button un full postback yapmasını sağlayacak script’i sayfaya render etmemektedir. Bu soruna karşı ScriptManager’ın render ettiği script’i elle oluşturmaktan, Page_LifeCycle’ın değişik aşamalarında metodu çalıştırmaya kadar bir çok çözüm denemiş olsam da hepsinde bazı sorunlar oluştu. En sonunda aşağıdaki basit ama etkili çözüm sayesinde sonuca ulaştım;


Yukarıda yaptığımız değişiklik aslında .NET tarafındaki visible property sini tercih etmeyerek, css ile UserControl’ün görünürlüğünü değiştirmektir. Böylece ScriptManager için UserControl artık görünmez olmadığından arzu ettiğimiz script sayfaya render olacaktır.
Fakat bu çözümün bir dezavantajı da tabi ki UserControl’ün oluşturduğu html çıktısının devamlı render edilmesidir.



Yanıtla



SON YAZILARIM

c#
‘Configuration system failed to initialize’ Hatası

Bugün karşılaştığım 'Configuration system failed to initialize' hatası basit ama bir o kadar da rahatsız...

asp.net
ASP.NET Timeout Süreleri

Web uygulamalarında bazı durumlarda sunucuya yapılan request süreleri çok fazla olabilir veya kullanıcıların...

ajax
UserControl, UpdatePanel ve RegisterPostBack Sorunu

ASP.NET AJAX ile gelen sorunlardan biri de UpdatePanel içerisinde bazı durumlarda ajax postback yerine full...