mehmetduran.com - Paylaşmak Güzeldir...
Jquery ve Ajax ile Kullanıcı Kontrollerini Kullanma - 2
Bu yazımda jquery ve ajax ile kullanıcı kontrollerini (web user control) dinamik olarak yani çalışmasını istediğimiz c# kodlarıyla beraber nasıl kullanabileceğimizi göstereceğim. Bu bölümdeki ilk yazımda sadece kullanıcı kontrollerinin html çıktısını alıp kullanıyorduk. Ancak daha kullanışlı olması ve kullanıcı kontrollerini daha etkin kullanabilmek için kullanıcı kontrollerini çalışır kodlarıyla kullanmak gerekir. Bunun için yapmamız gerekenleri şöyle sıralayabiliriz:

Öncelikle kullanacağımız kullanıcı kontrollerinin page_load eventı gibi onload eventını kullanmamız gerekiyor.

    protected override void OnLoad(EventArgs e)
    {
        //kontrol yüklendiğinde çalışacak kodlar
        base.onLoad(e)
    }

Daha sonra ise jquery ajax metodu ile çağıracağımız webmethodun içerisinde bu kullanıcı kontrolünün onload eventının çalışarak gelmesi için şu şekilde bir kod yazmalıyız:

    [System.Web.Services.WebMethod]
    public static string doldur(string adres)
    {
        string sonuc = "";
        Page p = new Page();
        UserControl u = (UserControl)p.LoadControl(adres);
        u.LoadControl(adres);
        p.Controls.Add(u);
        StringWriter sw = new StringWriter();
        HttpContext.Current.Server.Execute(p, sw, false);
        sonuc = sw.ToString();
        sw.Close();
        return sonuc;
    }

Bu kodu da yazdıktan sonra artık jquery ajax ile webmetodu çağırabiliriz ve kullanıcı kontrollerini yüklerken onload eventında ki kodlarının çalışmasını sağlayabiliriz.

Jquery kodlarımız da şöyle olmalı:

$.ajax({
          type: "POST",
          url: "default.aspx/doldur,
          data: "{adres:'"+adres+"'}", // adres, kullanıcı kontrolünün adı/adresi olacak.
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          success: function(msg){
                        $("#alan").html(msg.d);
            }
        });


Böylece kullanıcı kontrolünde asp.net kontrollerini ve istediğimiz kodları çalıştırabiliriz. Çok verimli çok kullanışlı uygulamalar geliştirebiliriz. Benim son olarak yaptığım Ajaxgaleri tamamen bu yöntem üzerine hazırlandı. Sizler de bu yöntem ile çok verimli uygulamalar geliştirebilirsiniz.

İyi Çalışmalar!
Mehmet Duran 27 Eylül Cumartesi 2008 17 2242 4,3
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Jquery ve Ajax ile Dataları Sayfalama İşlemi Asp.net Uygulamalarında Namespace ve Class Kullanımı Learn C# (Includes the C# 3.0 Features) E-Book Bilgisayarımızda Asp Sayfalarını Çalıştırmak için IIS Ayarları Jquery ile Saydamlık(Opacity) Kullanarak Menü Hazırlama
Yorumlar
Yorum Yaz
RSS Yorum Takibi
EmrE TURAN 27 Aralık Cumartesi 2008 23:37 #1
Sende olmasan jQuery nasıl öğrencez hiç bilmiyorum. Anlamadığım birşey var OnLoadtaki base.OnLoad(e); tam olarak ne işe yarıyor
Mehmet Duran 27 Aralık Cumartesi 2008 23:50 #2
Burada kullandığımız metot override olduğundan dolayı dediğin ifade kullanılıyor. Yani yazdığımız bu metodun çalışması gereken bir adım. Zira visual studio ile bu kodlamayı yaparken bu kod bloğu otomatik oluşuyor.
Serdar BÖLÜM 07 Şubat Cumartesi 2009 11:14 #3
Çok güzel bir uygulama teşekkür ederim. Acaba bu işlem sırasında kullanıcı kontrolüne parametre göndermenin bir yolu var mı? Ben bulamadım şahsen.
Mehmet Duran 07 Şubat Cumartesi 2009 12:00 #4
Tabiki parametre veya istediğimiz bir bilgiyi gönderebiliriz. Bunu da ajax metodunda belirlediğimiz url ile yapabiliriz. Url`de tıpkı querystring mantığı ile parametre gönderebiliriz. Bunu da kullanıcı kontrolünün kod kısmında request.rawurl deyip tüm url`yi alabiliyoruz. Daha sonra ise elde ettiğimiz ifadeyi split edip istediğimiz bilgiye ulaşıyoruz. Ancak burada split ile uğraşıyoruz. Çünkü; request.querystring çalışmıyor.
Tuncay Peker 18 Şubat Çarşamba 2009 15:48 #5
Mehmet çok işime yarıyacak bir yol göstermişsin.Çok teşekkür ederim sana..
Ercüment 09 Mart Pazartesi 2009 15:39 #6
Yüklediğimi Kullanıcı kontrolüne test için protected override void OnLoad(EventArgs e) { base.OnLoad(e); Response.Write("Geldi"); } Yazıyorum. hiç bir şekilde çalışmıyor. Nerede yanlış yapıyorum..
Mehmet Duran 09 Mart Pazartesi 2009 21:31 #7
Tam olarak nasıl kullanıyorsun ve ne yapmak istiyorsun?
Ercüment 10 Mart Salı 2009 11:42 #8
Sorunu düzellttim. webservis ayarlamasında aşağıdaki yöndemle usercontrol`u yüklüyordum. HtmlTextWriter ht = new HtmlTextWriter(sw); p.RenderControl(ht); HttpContext.Current.Server.Execute(p, sw, false); olarak değiştirdiğimde düzeldi.. Fakat sayfada AutoPostBack özelliğini kullanamıyorum. DataGrid sayfalama yapmıyor. örneğin. test için dropDownList ekledim oda AutoPostBack olmuyor. Bunun için ne yapmam gerekyor? theform.__EVET TARGET null hatası veriyor. yardımların için teşekkür ederim.
Mehmet Duran 10 Mart Salı 2009 18:17 #9
Daha önce hiç karşılaşmamıştım bu sorunla. Daha doğrusu postback`i engelleyecek bir işlem yok burada. Sadece ajax ile kullanıcı kontrolünü okuyup alıyoruz. Postback`i engelleyen başka birşey olsa gerek.
fethi su 08 Ağustos Cumartesi 2009 13:53 #10
Selamun Aleyküm . Merhaba mehmet Duran. Hocam bu yöntemi kullanıyorum ancak şöyle bir sıkıntı var örneğin usercontrolumde normal html işlemleri yapınca veya respoense.write yapınca işlem gerçekleşiyor ve user control yükleniyor. Ancak usercontrole bir gridview attığımda şöyle bir sorun ile karşı karşıya kalıyorum. Error executing child request for handler 'System.Web.UI.Page' Bir server kontrol attığımda çalışmmıyor bu durumda benim herşeyi html kontrol olarak mı yapmam lazım. iyi çalışmalar
Mehmet Duran 09 Ağustos Pazar 2009 01:31 #11
Gridview'ın çalışması form tagı arasında olması ve bu form tagının runat=Server gibi özelliği olması gerekiyor. Bu yüzden hatayı alıyorsundur. Gridview yerine datalist, repeater kontrolünü kullanabilirsin.
HasanG 11 Aralık Cuma 2009 12:32 #12
Merhabalar Mehmet, Sormak istediğim birşey var. Bu usercontrolleri sunucu tarafından isterken ne şekilde parametre gönderebiliriz? Şu an bir haber portali tasarlıyorum ve yorumları jQuery ile çekmek istiyorum. User Controlü talep ederken bir parametre gönderebilirmiyiz? Mesela NewsComments.ascx?action=GetComments?NewsID=x Teşekkür ederim şimdiden.
Mehmet Duran 11 Aralık Cuma 2009 12:55 #13
Evet dediğin olay mümkün ve ben de aynen o şekilde bir kullanım yapıyorum çoğu yerde. Hem url'de dediğin gibi bir parametre iletimi mümkün hem de ajax metodunda data özelliği ile veri göndermek mümkün. Hangisini tercih edeceğin sana kalmış.
HasanG 11 Aralık Cuma 2009 13:44 #14
Ben jquery ile o sayfaya istek göndermiyorum yanlız. Çektiğim kontrolü gizlemek adına sadece sayfa indexi ile istek gönderiyorum sunucu tarafında bu indexi kontrol edip url belirliyorum fakat aşağıdaki gibi hataya düşüyorum: System.Web.HttpException: '~/Controls/NewsComments.ascx?a=5' is not a valid virtual path. Bunun önlenmesi adına birşey yapabilirmiyim? Ya da farklı bir kullanım mı denemem gerek?
Mehmet Duran 11 Aralık Cuma 2009 22:41 #15
Sayfaya istek yapmak gerekmiyor. Dediğim gibi data iletimi yapabilirsin. Hataya gelince virtual path'de bir sorun var. Bu değeri server.mappath ile vermeyi dene bir de. Sorun sadece path sorunu.
HasanG 11 Aralık Cuma 2009 23:04 #16
Çok sağol Mehmet, yapmaya çalıştığım şeyinsaçma olduğunu biraz geç anladım. Yorumları jQuery ile çekmemin bir faydası yokmuş aslında. Yabancı kaynaklardan da araştırdığıma göre controle query string paslayamıyoruz o şekilde. Session variable ile yapmayı önermişler fakat o durumda da başka sorunlar çıkacaktı. Herneyse :) Yine ufak bir not: Belki bilerek yapmışsındır ama yazdığımız yorumlardaki "\n"leri br tagıyla değiştirmen güzel olurdu. Teşekkür ederim.
Mehmet Duran 11 Aralık Cuma 2009 23:10 #17
Yapmak istediğini anladım ve bu yöntemi sitemin yönetim panelinde kullanıyorum. Yorum bölümünü de bu şekilde Ajax ile yapmıştım ama daha sonra değiştirdim. Direk ilk yorumunda söylediğin gibi url ile data gönderebilirsin. Ben kullanıyorum ve bir sorun yok. Ayrıca yorum konusunda belirttiğin kontrolü yapmak istiyorum veya basit bir editör koymak istiyorum. Bunu da zamanla hallederim. Şimdilik pek vaktim yok.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Hata yapmayan bir insan genellikle hiçbirşey yapmıyordur.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009