Kategoriler


SON YORUMLAR
Öğrenmeye Aç, Bir Misafir!
Abi seni daha (12.08.2018) yeni keşfettim. Ben aslında bilgisayar mühendisliğini 2 dala ayrılıdığını biliyordum, hani şöyle 1- Yazılım Mühendisliği 2- Donanım Mühendisliği (PC parçası yapmak gibi şeyler) biliyorum, saçma geliyor ama bildiğimi sanıyordum ta ki; bu siteyi bulana kadar! Meğer bilgisayar mühendisliği zaten yazılımla ilgileniyormuş.. Abi bu arada 10. Sınıfım, İngilizce seviyem gayet iyi daha da geliştirmeye çalışıcam... Hayalim B.M olmaktı, İnşallah olurum bu arada sayfanın kalitesini biraz daha geliştirebilirsin. Ya hani çok sade duruyor.... ;) Selamlar!!
Tatar Ramazan
Türkkep .net mi java mı istiyorsun. Onu yaz önce. Ben devlette rahatım her çıkan teknolojiyi öğrenenem. Rahat bırakın beni. Bir ton niteliğimiz var MVC bilmiyoruz diye boş teneke muamelesi görüyoruz. Bilişim sektörü köle arıyor. 90lı yıllarda bir tane desktop geliştirme dili, bir tane veritabanı bilirdin tamam. Şimdi 10 tane teknoloji bilecen. Yok yaa! Kılı kırk yaracaklar, tipimizi beğenmeyecekler. Sizinle mi uğraşcaz be! Üniversiteyi uzatan, baraja takılan adamları işe alırlar. Ben bölümün en çalışkanlardandım. Bize afra tafra yaptılar. YDS ye hazırlanıyorum. Günde 1500 kelimeyi tekrar ediyorum. Aşırı çalışmaktan sinir sistemim iflas etti.
İsmail Bayram
Benim için çok faydalı oldu teşekkürler :)
Çağrı
Çok güzel makale olmuş. Ellerinize sağlık. Bir sorum olacak Ankara.da üniversite okumak iyi bir tercih mi? şuan ki maddi durumum İstanbula gelmek için yetersiz bilgili biri cevaplarsa sevinirim
Türkkep
E-Dönüşüm sürecinde Özel Entegratör (E-Fatura, E-Defter, E-Arşiv Fatura, E-İmza, E-Saklama, E-Tebligat, E-Mutabakat, E-Bordro, E-Yazışma gibi) olarak faaliyet gösteren, kurumsal ve bireysel müşterilerimize ülke genelinde yaygın olarak çözüm ve servis sağlayan kurumumuzun, bilgi teknolojileri ekibine Yazılım Geliştirme Mühendisi arıyoruz. İlgilenenlerin cv lerini esra.dakak@turkkep.com.tr adresine göndermeleri rica olunur.
proje destek
arduino ile sulama sistemi tasarımı. kontrolü uzaktan arayüz ile yapılacak. İlgilenen olursa lady.scientist.71@gmail.com
Pluto Loans
Merhaba, Herkesin proje, iş, konut, konsolidasyon vb. Için daha fazla paraya ihtiyaç duyduğu yılın bu zamanı. Şu anda% 3.lük düşük bir oranla 24 saat kredi veriyoruz, ilgilenen müşterilerimiz lütfen bize ulaşın e-posta adresi: plutocreditfinancier@gmail.com Telefon: +442033221063
Ercan Sezdi
Elektrik Elektronik Mühendisliği okumaktayım. Python, C++, Matlab Programlama ödevleri yapılır. Ayrıca Raspberry pi, Arduino programlamalaı yapılır. Fiyatta anlaşırız. Not: Öğrenciyiz öğrencinin halinden anlarız. İletişim: ercansezdi007@gmail.com
Tuna
Ben de bilgisayar mühendisi olmak istiyordum hem de geze tü Sinde gerçek mi dion
recep kurtuluş
Merhaba arkadaşlar bilgisayar mühendisliği ile ilgili aklımızdaki soruları giderebilecek bir video buldum aşağıdaki linkten bu bölüm ve kanaldaki diğer videolarda tüm mühendislikler ile ilgili videolara ulaşabilirsiniz. https://www.youtube.com/watch?v=L0yoAWhSdSU&
Özgür Yılmaz
Merhaba, Ben şu an İstanbul şehrinde yaşayan Özgür Yılmaz.ım. Ben sadece 2 çocuk ile şu anda bir dul ve Nisan 2016 mali bir durumda sıkışmış ve Collinslenderscompany tarafından 18000TL tarafından dolandırıldıktan sonra faturalarım yeniden ödeme ve ödeme gerekiyordu. Hem özel hem de kurumsal olarak çeşitli kredi şirketlerinden borçlanmayı denedim, ancak asla başarıya ulaşamadım ve çoğu banka kredimi reddetti. Ama Tanrı.nın sahip olacağı gibi, Tanrı.nın kalbi, bana 120.000 Euro.luk bir borç veren özel bir borç veren borç verenin ardından bir adamla tanıştım ve bugün bir işletme sahibiyim ve çocuklarım şu anda iyi çalışıyor, eğer herhangi biriyle iletişime geçmeniz gerekiyorsa Sadece% 3 faiz oranı ve daha iyi geri ödeme planları ve programı ile kredi kontrolü olmayan firma, lütfen Greg Dunne (plutocreditfinancier@gmail.com) ile iletişime geçin. Bunu yapmıyorum ama şu an çok mutluyum ve insanlara onun hakkında daha fazla bilgi vermeye karar verdim ve ayrıca Tanrı.nın onu daha fazla kutsamasını istiyorum. Şirket e-postası aracılığıyla ona ulaşabilirsiniz. plutocreditfinancier@gmail.com
atomparcacigi
Güzel ve bilgilendiren makaleler var çok beğendim. Ama yeni yazsanız daha iyi olur.
skynetademir@gmail.com
Her türlü C#, C++ ödevi yapılır.skynetademir@gmail.com
spiderman
tatar ramazan ODTÜ ve Sakarya mezunları süper ama İTÜ mezunlarını kapıdan içeri almıyorlar diyorsun ben de tam tersini biliyorum İTÜ mezunları mezun olmadan iş buluyor havada kapıyorlar OdTÜ ve sakarya mezunları iş arıyorlar sektörü bilmesek ?

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
Asp.Net 2.0 ve Client Script Callback
ASP.NET Web Forms
ASP.NET - The SortedList Object
ViewState’in Sunucuda Saklanması
SQL Server - SP için önemli ipuçları
Microsoft Doktora Yapanlara Yıllık 33 Euro Burs Veriyor.
Evinizde ADSL Üzerinden Web Hosting Hizmeti Nasıl Verilir
Kulak asmayın.
Dünya Genelinde İnsanları Üç gruba Ayırıyorlar
Kulak asmayın.
Kulak asmayın.
ASP.NET - Database Connection
Microsoft'un yeni silahı: Silverlight™
Flash CS4’ün Getirdiği Yenilikler
Windows Workflow Foundation'a Giriş
Teşekkürler
ASP.NET 2.0 - New Features
Google'da Engineering Manager olarak çalışan Niniane Wang ile çok güzel bir röportaj
Flash CS4’ün Getirdiği Yenilikler II - Programcılar Açısından
DAYINIZ YOK MU?

Bilgisayar Mühendisleri Portalı

Asp.Net 2.0 ve Client Script Callback

 

Web sayfalarımızda karşılaştığımız sorunlardan bir tanesi post-back hareketlerine neden olacak davranışların çok fazla olabilmesidir. Varsayılan olarak bir Button’ ın görevi sayfayı istemciden sunucuya içeriği ile birlikte göndermektir. Diğer yandan bazı bileşenlerin AutoPostback özelliklerine true değeri atanarak istemci tarafından sunucuya doğru postalama işlemi yapmaları da sağlanabilmektedir. Fakat bazı durumlarda sayfanın tamamını sunucuya doğru postalamak istemeyebiliriz. Örneğin il ve ilçe bilgilerini ayrı ayrı tutan DropDownList kontrollerinin olduğu bir senaryoda; bir il seçildiğinde buna bağlı ilçelerin yüklenmesi için sayfanının tamamiyle sunucuya gidip gelmesi gerekecektir. Böyle bir durumda sayfanın daha önceden istemci tarafına yüklenmiş pek çok parçası gereksiz yere tekrardan sunucu tarafından istemciye doğru gönderilecektir. Her ne kadar arabelleğe (caching) alma gibi tekniklerle sunucudan istemciye gelecek olan cevabın daha da hızlandırılmasını sağlayabilsekte, sayfanın tamamının postalanmasını engellemek ve sadece gereken kısımlarının güncellenmesi için ilgili parçaların postalanmasını sağlayabilmek daha etkili bir çözümdür. Tahmin edeceğiniz gibi bu yaklaşım modeli günümüzde Ajax ve Atlas.Net gibi teknolojik terimlerle karşımıza çıkmaktadır.

Biz bu makalemizde Asp.Net 2.0 üzerinde istemci tarafından geri bildirim (client script callback) işlemlerinin kolay bir şekilde nasıl yapılabileceğini incelemeye çalışacağız. İlk olarak çalışma modelinden bahsedelim. Başrol oyuncumuz ICallbackEventHandler arayüzüdür. Bu arayüzü ilgili web sayfasına ait sınıfamıza uygulamamız gerekmektedir. Uygulanan arayüz beraberinde iki metod sunmaktadır. Bu metodlar GetCallbackResult ve RaiseCallbackEvent üyeleridir. RaiseCallbackEvent metodu string tipinden bir parametre alır. Bu parametrenin rolü oldukça önemlidir. Nitekim istemci tarafından yada başka bir deyişle tarayıcı tarafından sunucuya doğru string tipte bir değer taşınması gerekmektedir. Örneğin illeri gösteren DropDownList kontrolünün seçilen değerinin string karşılığı, parametre olarak istemci tarafına gelebilir. GetCallbackResult metodu ise, geriye string tipinden bir değer döndürmektedir. Dolayısıyla bu değer istemci tarafından ele alınacak bilgiyi içermektedir. Örneğin seçilen ile bağlı ilçeleri bu dönüş değeri olarak düşünebiliriz. Buradaki tek problem, istemciden sunucuya gelen yada sunucudan istemciye dönen bilgilerin string tabanlı olmasıdır. Bu sebepten istemci tarafındada bir Javascript kodunun GetCallbackResult metodundan dönen değeri ele alacak şekilde yazılmış olması gerekecektir. Benzer şekilde sunucudan istemciye gönderilecek string bilgininde özel olarak hazırlanması gerekecektir. Nitekim istemci tarafından ayrıştırılarak kullanılması söz konusu olabilir. Bu gereksinimlerin karşılanmasının ardından sunucu tarafında yapmamız gereken tek şey, istemcinin RaiseCallbackEvent metodunu nasıl tetikleyeceğini bildirmek olacaktır. Bu amaçlada .Net’ in sunuduğu bazı metodlardan faydalanabiliriz. Bu metodlar yardımıyla sunucu tarafından istemci üzerine javascript kodu eklemek gibi işlemleri gerçekleştirebilmekteyiz. Sonuç olarak elde edeceğimiz mimari model aşağıdaki şekildekine benzer olacaktır.

Dilerseniz bir örnek üzerinden devam edelim. Senaryomuzda AdventureWorks veritabanında yer alan ProductSubCategory ve ProductCategory tablolarını ele alacağız. İlk olarak web sayfamızı aşağıdakine benzer bir şekilde tasarlayarak işe koyulalım.

İstemci Kategoriler’ in tutulduğu DropDownList bileşeninden bir öğe seçtiğinde sayfanın tamamı sunucuya gönderilmeden, sadece bizim için gerekli olan Alt Kategoriler gelecek ve ilgili DropDownList bileşenine dolacak. Aslında Alt Kategorileri gösteren DropDownListe’ e dolacağını söylemek çok doğru bir yaklaşım değildir. Nitekim, istemci tarafında var olan HTML çıktısında DropDownList kontrolü bir select takısı olarak görünür. Öğeleri ise içeride birer Option takısı olarak yer almaktadır.

Dolayısıyla Alt Kategorileri doldurmak ile kastettiğimiz; istemciye gelen string cevabın içerisindeki alanları ayrıştırarak, ilgili select takısı içerisine birer option takısı olarak eklemektir. Tekrardan örneğimize dönebiliriz. İlk olarak kategorileri ProductCategories tablosundan yüklememiz gerekmektedir. Kategorileri doldurmak için SqlDataSource bilşeninden faydalanabiliriz. Select sorgumuz içerisinde ProductCategoryID ve Name alanlarını çekiyoruz.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>Kategoriler<br />
               
<asp:DropDownList ID="ddlKategoriler" runat="server" DataSourceID="dsKategoriler" DataTextField="Name" DataValueField="ProductCategoryID">
                </asp:DropDownList>
               
<asp:SqlDataSource ID="dsKategoriler" runat="server" ConnectionString="<%$ ConnectionStrings:AdvConStr %>" SelectCommand="SELECT ProductCategoryID, Name FROM Production.ProductCategory">
                </asp:SqlDataSource>
                Alt Kategoriler<br />
               
<asp:DropDownList ID="ddlAltKategoriler" runat="server">
                </asp:DropDownList>
            </div>
        </form>
    </body>
</html>

Bir sonraki adımımız olarak sayfamıza ICallbackEventHandler arayüzünü uygulamamız gerekiyor. Default.aspx sayfamız için sunucu tarafında yazılacak olan kodlar aşağıdaki gibi olacaktır.

private string _kategoriId;

public
string GetCallbackResult()
{
    using(SqlConnection conn=new SqlConnection(ConfigurationManager.ConnectionStrings["AdvConStr"].ConnectionString))
    {
        /* istemciden gelen CategoryId değerine göre SubCategory’ ler çekilir ve bir StringBuilder yardımıyla bir dönüş bilgisi oluşturulur. */
        SqlCommand cmd = new SqlCommand("Select ProductSubCategoryID,Name From Production.ProductSubCategory Where ProductCategoryId=@CatId", conn);
        cmd.Parameters.AddWithValue("@CatId", _kategoriId);
        conn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
       
StringBuilder builder = new StringBuilder();
        while (dr.Read())
        {
            builder.
Append(dr["ProductSubCategoryID"].ToString());
            builder.Append("|"); // Field’ ları birbirlerinden ayırabilmek için tek pipe konulur.
            builder.
Append(dr["Name"].ToString());
            builder.Append("||"); // satır sonları için çift Pipe konulur.
        }
        dr.Close();
        return
builder.ToString();
    }
}

public void
RaiseCallbackEvent(string eventArgument)
{
    /* istemci tarafından tetiklenen bu metoda gelen string parametre değerini alıp sayfa seviyesindeki bir değişkene atıyoruz. */
    _kategoriId = eventArgument;
}

Burada GetCallbackResult metodundan geriye döndürdüğümüz string bilgiyi oluşturma şeklimiz eminimki dikkatinizi çekmiştir. Bunun en büyük nedeni az önce bahsettiğimiz gibi DropDownList kontrolünün istemci tarafında bir select takısına dönüşmesi ve elemanlarının birer option haline gelmesidir. Sonuç itibariyle istemci tarafındaki DropDownList kontrolünün Html çıktısının taşıyabileceği değerler göz önüne alındığında bunları toplu bir halde tek bir string olarak göndermek yeterli değildir. Gönderilen string bilginin istemci tarafındaki fonksiyon içerisinde ayrıştırılabilmesi gerekecektir ki gelen bilgileri ayrıştırarak select takısı içerisine birer option olarak ekleyebilelim. Bu sebepten ProductSubCategoryId ve Name alanlarının arasına | gelecek ve her bir satırın sonundada || gelecek şekilde bir string oluşturulması tercih edilmiştir. Elbette burada | işaretini kullanmak zorunda değiliz. Bunun yerine yıldız yada virgül gibi sembolllerde konulabilir. Ancak elbette bu sembollerin okuduğumuz alanların içerisinde yer almamasına dikkat etmeliyiz. Böyle bir durumda istemci tarafındaki fonksiyon, satırları ve dolayısıyla alanları doğru bir şekilde ayrıştıramayacaktır.

Gelelim istemci tarafındaki fonksiyonumuza. Bu fonksiyonun temel görevi, GetCallbackResult metodundan dönecek olan string bilgiyi ayrıştırıp ddlAltKategoriler isimli dropdownList’ in Html karşılığı olan içeriğine birer option elemanı olarak olarak eklemek olacaktır.
 

<script type="text/javascript" language="javascript">

    function IstemciGeriBildirim(gelenBilgi,context)
    {
        /* Önce fonksiyona gelen altKategiler stringinin içeriğini taşıyacak DropDownList kontrolünü istemci tarafında yakalamılıyız. */
        var lstKategoriler=document.forms[0].elements[’ddlAltKategoriler’];
        lstKategoriler.innerHTML=""; // liste içeriği temizlenir
        // Gelen string bilgiyi || lara göre ayrıştıyoruz.
        var satirlar=gelenBilgi.split(’||’);

        // her bir satırı dolaşıyoruz.
        for(var i=0;i<satirlar.length;++i)
        {
            // satırları | işaretine göre ayrıştırıyoruz. Böylece alanları elde ediyoruz.
            var alanlar=satirlar[i].split(’|’);
       
            var altKategoriId=alanlar[0];
            var altKategoriAdi=alanlar[1];

            // Html tarafında listemiz için option elementini oluşturuyoruz. Value olarak altKategoriId’ yi içerik olarakta altKategoriAdi’ ni veriyoruz.
            var oge=document.createElement(’option’,altKategoriId);
            oge.innerHTML=altKategoriAdi;

            // Oluşturulan öğe listeye eklenir.
            lstKategoriler.appendChild(oge);
        }
    }

</script>

Bu JavaScript fonksiyonu sunucudaki GetCallbackResult metodundan dönen string bilgiyi ayrıştırmak ve istemci tarafındaki liste kutusuna eklemekten sorumludur. Unutulmamalıdır ki, istemci tarafına gelen bilgiler HTML içeriğidir. Dolayısıla DropDownList’ e eleman eklemek için ayrıştırılan her bir öğenin birer option elementi olarak ele alınması gerekmektedir. Yapmamız gereken son bir işlem daha vardır. İstemci tarafında, Kategorilerin tutulduğu liste kutusu üzerinde bir bir öğeden bir diğerine geçildiğinde, sunucu tarafındaki ilgili metodların tetiklenmesi gerekmektedir. Bunu gerçekleştirebilmek için sayfanın Page_Load olay metodu içerisine aşağıdaki kod satırlarını eklememiz yeterli olacaktır.

 

protected void Page_Load(object sender, EventArgs e)
{
    string script=
ClientScript.GetCallbackEventReference(this, "document.all[’ddlKategoriler’].value", "IstemciGeriBildirim", null);
   
ddlKategoriler.Attributes.Add("onChange", script);
}

GetCallbackEventReference isimli metod sayesinde istemci tarafı için gerekli olan script’ lerin otomatik olarak oluşturulmasını sağlayabiliriz. Metoun ilk parametresi, client callback işleminin ele alınacağı nesneyi belirtmektedir. Uygulamamız göz önüne alındığında bu nesne sayfanın kendi referansıdır. İkinci parametre istemci tarafından sunucu tarafındaki RaiseCallbackEvent metoduna gelecek olan parametredir ki bu senaryoda ddlKategoriler’ de seçili olan öğenin değeridir. Üçüncü parametre ile istemci tarafında, sunucudaki GetCallbackResult metodunun sonucunu ele alacak olan JavaScript fonksiyonunun adı belirtilir. Son parametre istemci tarafındaki fonksiyona geçirlmesi gereken ekstra bilgiler var ise kullanılır. Örneğimizde böyle bir ihtiyacımız olmadığı için son parametre değerini null olarak geçiyoruz. Son olarak, scriptlerin hangi kontrolün hangi niteliği için oluşturulacağını belirtiyoruz. Örneğimizde liste kutusunun onChange olayı için gerekli JavaScript’ lerin oluşturulmasını belirtmekteyiz.  (Aşağıdaki görüntüyü izleyebilmek için en azından Flash 6.0 sürümü gerekmektedir. )

Gördüğünüz gibi Kategorilerde değişiklik yaptığımızda alt kategoriler listesi dolmakta, ancak sayfanın sunucuyu tamamiyle postalandığına dair bir işaret görülmemektedir.

Client Script Callback mimarisi derinlemesine incelendiğinde sayfanın istemciden sunucuya doğru tamamen postalanmayışı, sayfaya ait bazı olay metodların çalışmadığı anlamına gelmez. Aslında sayfaya ait Page_Init, Page_Load ve Page_Unload gibi olaylar çalışmaktadır. Bununla birlikte örneğin PreRender, Render gibi olaylar ve hatta post-back olaylarına ait metodlar çalıştırılmamaktadır. Dolayısıyla ilgili sayfa için, bir bölümü kırpılmış bir yaşam döngüsünün söz konusu olduğunu ve çalıştığını söyleyebiliriz.

Client Script Callback ile ilgili dikkat edilmesi gereken bazı kısıtlamalarda vardır. Günümüzde hemen her tarayıcı programın JavaScript desteği vardır. Ancak bazı tarayıcıların Client Callback desteği olmayabilir. Hatta internet explorer bu sistemi gerçekleştirmek için ActiveX kullanır ve tarayıcının ActiveX ayarları güvenlik nedeniyle bilerek kapatılmış olabilir. Bu gibi sebeplerden dolayı Client Callback mimarisi doğru bir şekilde çalışmayacaktır. İstemcilerin kullandıkları tarayıcı programların ClientCallback desteğinin olup olmadığını öğrenmek ve uygulamanın işleyişini buna göre değiştirmek için Request.Browser.SupportsCallback özelliğini kullanabiliriz. Bu makalemizde kısaca istemci taraflı callback modelinin, .Net üzerinde nasıl gerçekleştirilebileceğini incelemeye çalıştık. Bir sonraki makalemizde görüşünceye dek hepinize mutlu günler dilerim.

Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın




Copyright© 2001-2018. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.