Karalama Defteri - Giriş SZP.net 4.1 Beta  
30 Ağustos Zafer Bayramı
Ağustos ayı Malazgirt zaferinden, Büyük Taarruza kadar zaferlerle doludur. Biz kimiz ve burada ne işimiz var? sorusunun cevabı 30 Ağustos gününde gizli gibi geliyor bana.

Şehitlerimize Allahtan rahmet, gazilerimize sağlık ve selamet diliyorum. Binlerce Fatihalarla.

Şükranlarımızı bir şekilde sunmalıyız ve bence bunun en iyi yolu düşünmek ve 30 Ağustos günü içinde saklı olan cevabı bulmak.

Bugün bana gurur ve huzur veriyor.

ufukyayla 30.08.2005 11:12:42 Yorumlar [0]



AJAX (Asynchronous JavaScript and XML)
ASP.net ajax, javascript, XML

Bu makale AJAX'ın pratik olarak nasıl kullanılabileceğine dair bir yaklaşımı anlatır.

AJAX yani Asynchronous JavaScript And XML. Henüz adı bu olmadan önce kullandığımız ama bir ad konunca nedense daha çok ilgimizi çeken şey.

Ne işe yarıyor?

Sayfada meydana gelen her tıklamada tarayıcının yeni bir istek yaparak bütün sayfayı güncellemesi yerine sadece belli bir kısmı yüklemesini sağlayarak ağ trafiğini azaltıyor ve kullanıcı dostu bir arabirim sağlıyor.

Nasıl çalışıyor?

Tarayıcı üzerinde çalışan bir Javascript'in sayfa üzerinde meydana gelen olaylara (event: tıklama vs.) göre sunucudan istekte bulunup gelen XML veriye göre sayfayı değiştirmesi. Bu durumda JS ve DOM'u destekleyen bir tarayıcıya ihtiyacımız var. Elbette XML destekli olmaları da gerekmektedir. IE, Firefox, Opera gibi tarayıcılar bazı farklılıklar olmakla beraber bu işi yapabilmektedir.

Şimdi kullanıcının sayfanızda bir linki tıkladığını düşünün, tarayıcı hemen sunucuya yeni bir istekte bulunup bütün sayfayı yeniden yükleyecektir. Sayfanın üstünde, altında, kenarlarında bulunan bütün sabit kısımlar ve biçimlendirme kodları gibi herşeyi. Oysa sadece bir <div> içindeki metni değiştirmek istemiş olabilirsiniz. İşte AJAX buna iyi bir çözümdür. Aşağıda örneğin tarayıcı tarafında çalışan hali ve tarayıcı JavaScript kodu verilmiştir. (Bu kod basit olması için sadece IE ye uygun yazılmıştır, en altta linkini bulacağınız başka bir örnek yaygın tarayıcıların hepsinde çalışmaktadır.)

Örnek sayfa (index.htm):

<html>
<head>
<title>Ajax</title>
<meta http-equiv='content-language' content='tr' />
<meta http-equiv='content-type' content='text/html; charset=windows-1254' />
<script>
    var ajax_istek;
    
    function ajax_getir(url){
        if (ajax_istek){ajax_istek.abort()}
        else{ajax_istek=new ActiveXObject("Microsoft.XMLHTTP")}
        if (ajax_istek){
            ajax_istek.onreadystatechange=ajax_takipet;
            ajax_istek.open('get',url,true);
            ajax_istek.send(null);
        }
    }
    
    function ajax_takipet(){
        var cevapXML;
        var kimlik;
        var deger;
        
        if (ajax_istek.readyState==4){
            if (ajax_istek.status==200){
                cevapXML=ajax_istek.responseXML.documentElement;
                kimlik=cevapXML.getElementsByTagName('kimlik')[0].firstChild.data;
                deger=cevapXML.getElementsByTagName('deger')[0].firstChild.data;
                
                document.getElementById(kimlik).innerHTML=deger;
            }
        }
    }
</script>
</head>
<body>

Aşağıdan sırasıyla 1, 2, 3 gibi tıklayın.<br/><br/>
<a href="#" onclick="ajax_getir('ajax.asp?istek=1')">1</a> -
<a href="#" onclick="ajax_getir('ajax.asp?istek=2')">2</a> -
<a href="#" onclick="ajax_getir('ajax.asp?istek=3')">3</a> -
<a href="#" onclick="ajax_getir('ajax.asp?istek=4')">4</a><br/><br/>
<a href="index.htm" target="_blank">Yeni Pencerede Aç</a><br/><br/><br/><br/>

<div id="kutu1" name="kutu1" style="width:100%;height:100px;background:ffff00">&nbsp;</div><br/>
<div id="kutu2" name="kutu2" style="width:100%;height:100px;background:ff00ff">&nbsp;</div><br/>

</body>
</html>


ajax_getir fonksiyonunda oluşturulan XMLHttp isteğinin olaylarını takip etmek üzere ajax_istek.onreadystatechange=ajax_takipet; satırı ile ajax_takipet fonksiyonu atanmıştır. Yapılan istek bittiğinde ajax_istek.readyState'nin değeri 4 olacaktır. Eğer sunucu düzgün bir şekilde cevap verirse ajax_istek.status'un değeri 200 olur. Bu durumda gelen XML verisi parse edilmektedir. Gelen verinin içinden hangi <div>'in değiştirilmek istendiği ve içine konulmak istenen veri çekilir.

Sunucu tarafında çalışan kod (ajax.asp):

<%

Session.Codepage=1254
Session.LCID=1055
Response.Expires=-1

Dim Istek
Dim Kimlik
Dim Deger

Istek=Request.QueryString("istek")

Select Case Istek
    Case "1"
        Kimlik="kutu1"
        Deger="<b>AJAX için JavaScript kullanılır</b>"
    Case "2"
        Kimlik="kutu1"
        Deger="<i>Veri sunucudan XML formatında gelir</i>"
    Case "3"
        Kimlik="kutu2"
        Deger="<u>Tarayıcı tarafında XML verisi parse edilir</u>"
    Case "4"
        Kimlik="kutu2"
        Deger="<select id='sec' name='sec'>" & _
            "<option value='0'>Seçenek 1</option>" & _
            "<option value='1'>Seçenek 2</option>" & _
            "</select>"
End Select

Response.ContentType="text/xml"
Response.Write "<?xml version=""1.0"" encoding=""windows-1254"" ?>"
Response.Write "<ajax>"
    Response.Write "<nesne>"
        Response.Write "<kimlik>" & Kimlik & "</kimlik>"
        Response.Write "<deger>" & XMLMetni(Deger) & "</deger>"
    Response.Write "</nesne>"
Response.Write "</ajax>"

Function XMLMetni(psMetin)
    Dim ysMetin
    ysMetin=psMetin
    
    ysMetin=Replace(ysMetin,"&","&amp;")
    ysMetin=Replace(ysMetin,">","&gt;")
    ysMetin=Replace(ysMetin,"<","&lt;")
    ysMetin=Replace(ysMetin,"'","&apos;")
    ysMetin=Replace(ysMetin,"""","&quot;")
    
    XMLMetni=ysMetin
End Function

%>


Görüldüğü gibi asp kodu gelen isteğe göre değiştirilecek içeriği nesnenin kimlik bilgisini ve içerik metnini ayarlamakta ve XML formatında istemciye yollamaktadır. Eğer bir div içine yolladğınız veri içinde başka html kontolleri varsa onlar da görüntülecektir. 4. link buna bir örnektir.

Konu yeni olduğundan örnek kodu indirin, sunucunuzda bir dizine koyun ve index.htm dosyasını çalıştırarak sırayla 1, 2, 3 ve 4 numaralı linklere tıklayın.

Örneğe bak >> http://www.ufukyayla.com/sair/fk/ajaxornek/index.htm

Daha çaplı bir örnek ve kodu için;
http://www.ufukyayla.com/sair/ajax/deneme.aspx

Bu yazı kaynak göstermek kaydıyla kısmen, tamamen veya değiştirilerek yayınlanabilir.
En yeni makaleler FındıkKurdu'nda yayınlanır. http://www.findikkurdu.com

ufukyayla 07.08.2005 19:32:58 Yorumlar [0]



AJAX Başka Bir Yaklaşım
AJAX yani Asynchronous JavaScript and XML. Henüz adı bu olmadan önce kullandığımız ama bir ad konunca nedense daha çok ilgimizi çeken şey.

Ne işe yarıyor?

Tarayıcı üzerinde çalışan bir Javascript'in sayfa üzerinde meydana gelen olaylara (event: tıklama vs.) göre sunucudan istekte bulunup gelen XML veriye göre sayfayı değiştirmesi.

Örnek (ASP.NET)
http://www.ufukyayla.com/sair/ajax/deneme.aspx
Kodu (ASP)
http://www.ufukyayla.com/sair/ajax/ajax.zip


Daha basit bir örnek (ASP)
http://www.ufukyayla.com/sair/fk/ajaxornek/index.htm

Kodu (ASP)
http://www.ufukyayla.com/sair/fk/ajaxornek/ornekajax.zip

Bu konuda yazılmış makalemi Fındık Kurdu sitesininden okumanızı öneririm.
http://www.findikkurdu.com/Article.aspx?ID=42

ufukyayla 07.08.2005 17:00:24 Yorumlar [0]



Overload Yordamlar ve Overloading Kavramı
ASP.net overload, overloading, yordam, optional, seçimlik

Daha öncen yazmış olduğum ve sınıf, nesne konularını anlatan makaleme devam niteliğinde overloading kavramını anlatmaya çalışacağım. Overloading yeni bir kavramdır, bir sınıfın içinde aynı adı taşıyan ama farklı işlemler yapan yordamların olabilmesini durumudur. Benzer işler yapan yordamlara farklı adlar vermek hem kafa karıştırıcı hem de anlamlı ad bulma zorluğu sebebiyle tamlamalı, uzun adlara sebep olur. overloading ile aynı ada sahip yordamlar yazmak mümkündür. Bu yordamlar parametre yapıları ile birbirlerinden ayrılırlar. Örneğin .NET ile beraber kullanmaya aşina olduğumuz OleDBCommand nesnesinin yapılandırıcısının (yapılandırıcı, constructor: bu konuyu sonra anlatacağım, şimdilik bunun bir yordam olduğunu bilin yeter) dört farklı overload hali vardır.

OleDBCommand()
OleDBCommand(cmdText)
OleDBCommand(cmdText, Connection)
OleDBCommand(cmdText, Connection, Transaction)


Örnek olarak basit temel matematik işlemlerini yapan bir sınıf yazıyorum. Bu sınıfın 4 farklı overload hali olacak.

Imports System

Namespace Matematik

Public Class Temel
    Public Islem As String
    Public Sayi1 As Integer
    Public Sayi2 As Integer
    
    Public Function Hesapla(piSayi1 As Integer, piSayi2 As Integer, psIslem As String)
        Sayi1=piSayi1
        Sayi2=piSayi2
        Islem=psIslem
        Return Hesapla()
    End Function
    
    Public Function Hesapla(psIslem As String)
        Islem=psIslem
        Return Hesapla()
    End Function
    
    Public Function Hesapla()
        Select Case Islem
            Case "+" : Return Sayi1 + Sayi2
            Case "-" : Return Sayi1 - Sayi2
            Case "*" : Return Sayi1 * Sayi2
            Case "/" : Return Sayi1 / Sayi2
        End Select
    End Function
    
    Public Function Hesapla(piSayi As Integer)
        Return piSayi * piSayi
    End Function
End Class

End NameSpace


Görüldüğü gibi sınıfın içinde aynı adı taşıyan  (Hesap) 4 farklı yordam var, bu yordamlardan 1.si 3 parametre, 2.si bir parametre almakta, 3.sü ise hiç parametre almamaktadır. Yine 4.sü 1 parametre almaktadır. 1., 2. ve 3. yordamlar parametre sayıları farklı olduğundan birbirlerinden ayırt edilebilmektedir. 2. ile 4. ise aldıkları parametrenin türünden (String, Integer) ayırt edilmektedir.  

Şimdi bu sınıftan bir nesne türetip yazdığımız bu yordamları kullanalım.

Public Sub Deneme()
    Dim Hesap As New Matematik.Temel()
    Dim Sonuc As Integer
    
    '1. Overload Yordam
    Sonuc=Hesap.Hesapla(10,2,"+")
    Response.Write(Sonuc.ToString)
    
    '2. Overload Yordam
    Hesap.Sayi1=10
    Hesap.Sayi2=2
    Sonuc=Hesap.Hesapla("+")
    Response.Write(Sonuc.ToString)
    
    '3. Overload Yordam
    Hesap.Sayi1=10
    Hesap.Sayi2=2
    Hesap.Islem="+"
    Sonuc=Hesap.Hesapla()
    Response.Write(Sonuc.ToString)
    
    '4. Overload Yordam
    Sonuc=Hesap.Hesapla(2)
    Response.Write(Sonuc.ToString)
End Sub


1., 2. ve 3. overload yordamların sonucuları 12'dir. 4. overload yordamın sonucu ise 4 olup 2 sayısının karesidir.

Overload yordamlar birbirlerinden parametre sayılarının ve/veya türlerinin farklı olmasıyla ayırt edilirler. Parametrelerin adlarının farklı olması bu durumun dışındadır. Yani 5. bir yordam olarak sınıf içine

Public Function Hesapla(psDeger As Integer)
    Return psDeger * psDeger
End Function


yordamını yazdığımızda hata alırız. Çünkü 4. yordamla karışmaktadır. Her ne kadar parametre adı (psDeger) 4. yordamın parametresinden (piSayi) farklı olsa da aynı sayıda (bir adet) parametre almaktadırlar ve ikisininki de Integer türündedir.

Overload yordamlar tanımlanırken Overload anahtar kelimesinin kullanılması zorunlu değildir ancak birinde kullanılırsa hepsinde kullanılmalıdır.

Seçimlik Parametreler

Bu başlık içerisinde seçimlik parametrelere de (optional parameters) değinmek yerinde olacaktır. Seçimlik parametreler yordamın çağırılmasında mutlaka kullanılması gerekmeyen parametrelerdir. Varsayılan (default) bir değer alırlar ve yordam çağırılırken belirtilmedikleri durumda varsayılan değerleri kullanılır. Örneğin;

Public Function Hesapla(piSayi1 As Integer, piSayi2 As Integer, Optional psIslem As String="+")
    Select Case psIslem
        Case "+" : Return piSayi1 + piSayi2
        Case "-" : Return piSayi1 - piSayi2
        Case "*" : Return piSayi1 * piSayi2
        Case "/" : Return piSayi1 / piSayi2
    End Select
End Function


Burada Hesapla fonksiyonu esasen 3 parametre almakla beraber yapılacak işlem türünü belirleyen psIslem parametresi seçimlik olarak tanımlanmıştır ve varsayılan olarak "+" değerini almaktadır.

Sonuc=Hesapla(10,2,"+") 12 sonucu döndürür.
Sonuc=Hesapla(10,2) 12 sonucu döndürür.

Her seçimlik parametre varsayılan değer almak zorundadır.
Yordam yazılırken seçimlik bir parametre tanımlandığında bu parametrenin sağında yer alacak diğer parametreler de seçimlik olmalıdır.
Public Function Hesapla(piSayi1 As Integer, Optional piSayi2 As Integer=2, Optional psIslem As String="+")
geçerli bir tanımlamadır.
Public Function Hesapla(piSayi1 As Integer, Optional piSayi2 As Integer=2, psIslem As String)
tanımlaması ise geçersizdir. Çünkü seçimlik olan piSayi2 parametresinin sağındaki psIslem parametresi seçimlik olarak tanımlanmamıştır.

Şimdi tekrar overload yordamlara dönelim. Overload yordamlar birbirlerinden parametre sayılarının ve/veya türlerinin farklı olmasıyla ayırt edilmektedirler. Ancak seçimlik parametreler bunun dışındadır. Bir sınıfın içinde aşağıdaki gibi tanımlanmış iki yordam olamaz;

Public Function Hesapla(piSayi1 As Integer, piSayi2 As Integer=2)
    ....
End Sub

Public Function Hesapla(piSayi1 As Integer, piSayi2 As Integer=2, Optional psIslem As String="+")
    ....
End Sub


Çünkü yordam Sonuc=Hesapla(10,2) şeklinde çağrıldığında bu overload yordamların hangisinin çalışacağı ayırt edilemez.

Kolay gelsin.

ufukyayla 06.08.2005 21:20:36 Yorumlar [0]



Dizin İçeriği Görüntüleme ve Dosya Yükleme
ASP.net dizin, dosya, yükleme, listeleme, folder, file, upload, listing

İlk önce bir dizinin içeriğini nasıl gösterebileceğimizi görelim. Önce kodu veriyorum.

dosyalar.aspx

<%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>

<script runat="server">
Private Sub Page_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs)
Dim Dizin As String=Server.Mappath("/")
Dim DizinBilgisi As New DirectoryInfo(Dizin)
Dim DosyaBilgisi As FileInfo

For Each DosyaBilgisi In DizinBilgisi.GetFiles("*.*")
Response.Write(DosyaBilgisi.Name & "<br/>")
Next

Response.Write("<form method='post' enctype='multipart/form-data' action='yukle.aspx'>")
Response.Write("<input type='file' id='dosya' name='dosya' size='40'><br/>")
Response.Write("<input type='submit' id='git' name='git' value='Yükle'>")
Response.Write("</form>")

End Sub
</script>


Dosya bilgilerini alma işlemi bir disk giriş-çıkış işlemi olduğundan kkinci satırda System.IO aduzayını import ettik.
Dim Dizin As String=Server.Mappath("/") satırında içeriğini görüntüleyeceğimiz dizini ayarlıyoruz.
Burada sunucumuzun kök dizinini seçtik. Dim Dizin As String=Server.Mappath("/") & "\dizin" şeklinde istediğimiz bir dizini de yazabilirdik.
Dim DizinBilgisi As New DirectoryInfo(Dizin) satırında DizinBilgisi adındaki nesnemize seçtiğimiz dizinin içerik bilgisini yükledik.
Bir For ... Next döngüsü ile DizinBilgisi adındaki nesnemizin içinde depolanmış olan dosya bilgilerini tek tek alarak yazdırdık.

Son kod blogunda yüklenecek dosyayı göstermemize yarayacak formu hazırladık.
Formun actionu yani düğmeye tıklandığında gideceği adres "yukle.aspx" dir.
Bu dosya gönderdiğimiz dosyayı dizine kaydedecek.

yukle.aspx

<%@ Page Language="VB" %>

<%@ Import Namespace="System.IO" %>

<script runat="server">
Private Sub Page_Load(ByVal Sender As System.Object, ByVal E As System.EventArgs)
Dim YuklemeDizini As String=Server.Mappath("/")
Dim GelenDosya As HttpPostedFile=Request.Files(0)

Dim DosyaAdi As String
Dim DosyaBilgisi As FileInfo

DosyaAdi=System.IO.Path.GetFileName(GelenDosya.FileName)

DosyaBilgisi=New FileInfo(YuklemeDizini & DosyaAdi)

If DosyaBilgisi.Exists=False Then
GelenDosya.SaveAs(YuklemeDizini & DosyaAdi)
Response.Redirect("dosyalar.aspx")
Else
Response.Write("Aynı adlı dosya zaten mevcut!<br/>")
Response.Write("<a href='dosyalar.aspx'>Geri dön</a>")
End If

End Sub
</script>


Dim YuklemeDizini As String=Server.Mappath("/") satırında yüklemenin yapılacağı dizini belirledik.
Dim GelenDosya As HttpPostedFile=Request.Files(0) satırında gelen dosya verisini GelenDosya nesnesine atadık.
DosyaAdi=System.IO.Path.GetFileName(GelenDosya.FileName) satırında gelen dosyanın adını aldık.
DosyaBilgisi=New FileInfo(YuklemeDizini & DosyaAdi) satırında dosya adı ile dizin adını birleştirerek dosyaya ait bilgiyi oluşturduk.
If DosyaBilgisi.Exists=False Then satırında dosyanın zaten mevcut olup olmadığını kontrol ediyoruz. Dosya mevcut değilse "false", mevcutsa "true" döner.
GelenDosya.SaveAs(YuklemeDizini & DosyaAdi) satırı ile gelen dosyayı dizin içine kaydettik ve yükleme başarıldığı için tarayıcıyı geri döndürdük.
Eğer dosya zaten mevcut olduğundan yüklenemiyor ise kullanıcıya bir uyarı gösterip, bir lik koyarak geri dönebilmesini sağladık.

Yukarıda kodlarını verdiğim dosyalar.aspx ve yukle.aspx dosyalarını oluşturun ve sunucunuzda bir dizine koyarak dosyalar.aspx´i çalıştırın.

Bu yazı kaynak göstermek kaydıyla kısmen, tamamen veya değiştirilerek yayınlanabilir.
En yeni makaleler FındıkKurdu'nda yayınlanır. http://www.findikkurdu.com

Kolay gelsin.

ufukyayla 28.07.2005 22:18:02 Yorumlar [0]



Sayfalar : 1 2 3 [4] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

Blog - ASP.NET!VB
  Karalama Defteri
 Giriş
 Bölümler
 Son Yorumlar
 
  Bölümler
 Deli Gömleği
 Eşeryakoli
 Makaleler
 Projeler
 UfukSZP Dağıtımı
 ASP.NET Maceraları
 
  Son Karalamalar
 Foruma üye girince oluşan ...
 Taşındık
 SoulTips Gibi Birşey
 Ya Nasip
 Ulan Ubuntu
 El Yapımı Projeksiyon
 Ne İstiyor Bu Üyeler
 Sınıflarda Kalıtım (Inheri...
 Sadeleştirme Şart
 South Park
 
  Son Yorumlananlar
 Ya Nasip
 Ben Ziraat Mühendisiyim
 UfukSZP Dağıtımını Kullananl...
 Grup Hepsi
 Ne İstiyor Bu Üyeler
 Ziyaretçi Defteri
 Powered By Access
 Ulan Ubuntu
 Network A.K.T. (Arada Kafamı...
 Sınıf, Nesne, Nesneye Yöneli...
 
  Güzel İnsanlar
 Fındık Kabuğu
 Evren AYAN
 Halil TUNÇ
 Can HANHAN
 Mehmet TURAC
 Bloglar Alemi
 
  Şu Anda Bağlılar
 Misafir, Misafir, Misafir, Misafir, Misafir, Misafir, Misafir, Misafir 
 
  Ordan Burdan
 Dr. Metin AKSU ve klonlarının sitesi yeniden açıldı, hemde .NET
http://www.findikkabugu.net
 
 
 
 
 
 
 
 
 
 

Bu sayfa 0,171 saniyede derlendi.





Bu sitede çalışan bütün ASP.net ve JavaScript kodları orjinaldir ve sıfırdan yazılmıştır.
Site yaygın bütün tarayıcılarla (IE, Firefox vs.) uyumludur.
Bu sitede kullanılan SZP.net 4.1 Beta altyapısı MS Access, MySQL Server ve MS-SQL Server ile çalışabilmektedir.

Tasarım & Kodlama
Ufuk YAYLA