<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yigit Kiran &#187; Ajax</title>
	<atom:link href="http://www.yigitkiran.net/blog/software-development/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yigitkiran.net/blog</link>
	<description>speculative execution</description>
	<lastBuildDate>Thu, 10 Mar 2011 16:16:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>Web Sayfaniza Virtual Earth Haritalari Ekleyin</title>
		<link>http://www.yigitkiran.net/blog/2010/02/web-sayfaniza-virtual-earth-haritalari-ekleyin/</link>
		<comments>http://www.yigitkiran.net/blog/2010/02/web-sayfaniza-virtual-earth-haritalari-ekleyin/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 08:50:01 +0000</pubDate>
		<dc:creator>yigit</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TR]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[pc magazine]]></category>
		<category><![CDATA[virtual earth]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://blog.yigitkiran.net/?p=111</guid>
		<description><![CDATA[Günümüzde yoğun ilgi gören harita uygulamaları artık üç boyutlu görüntülenebilen, trafik yoğunluğunu bildiren, afet bölgelerindeki hasarı gösterebilen, Microsoft Live Local gibi servislerle bazı şehirlerde gezinmeye imkan veren özelliklere kavuştular. Hatta Dünya’da dolaşmaktan sıkıldıysanız, Google Sky veya bu ay incelediğimiz Microsoft Virtual Telescope gibi uygulamalar ile uzayı keşfetmeye başlayabilirsiniz. Gelişim süreci devam ederken firmalar web programcılarını da unutmuyor; SDK ve API’leri sürekli güncelleyerek uygulamaların başka sayfalara kolayca entegre edilebilmesi için uğraş veriyorlar. Bizde şimdi kullanımı giderek artan Microsoft Virtual Earth kütüphanelerinin yardımıyla web sitemiz için bir harita uygulaması hazırlayacağız.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik.png" rel="lightbox[111]"><img class="aligncenter size-large wp-image-112" title="baslik" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik-1024x589.png" alt="" width="491" height="282" /></a></p>
<p>Eskiden sadece büyük atlaslarda veya belgesellerde görebildiğimiz uydu fotoğrafları, gelişen teknoloji ve internet sayesinde artık her bilgisayardan erişilebilir hale geldi. Yaklaşık üç yıl önce ücretsiz bir şekilde hayata geçen Google Maps, coğrafi bilgi sistemlerini hayatımızın bir parçası haline getirmekle kalmadı, tarayıcımızda bir masaüstü uygulaması gibi çalışarak belkide AJAX teknolojisinin bu kadar yayılmasında en büyük etkenlerden biri oldu. Özellikle büyük şehirlerin yüksek çözünürlüklü fotoğraflarını kullanıcıların hizmetine sunan Google ve Microsoft gibi firmalar, bilmediğimiz bir adrese giderken bizi kaybolmaktan kurtarıyorlar.</p>
<p>Günümüzde yoğun ilgi gören harita uygulamaları artık üç boyutlu görüntülenebilen, trafik yoğunluğunu bildiren, afet bölgelerindeki hasarı gösterebilen, Microsoft Live Local gibi servislerle bazı şehirlerde gezinmeye imkan veren özelliklere kavuştular. Hatta Dünya’da dolaşmaktan sıkıldıysanız, Google Sky veya bu ay incelediğimiz Microsoft Virtual Telescope gibi uygulamalar ile uzayı keşfetmeye başlayabilirsiniz. Gelişim süreci devam ederken firmalar web programcılarını da unutmuyor; SDK ve API’leri sürekli güncelleyerek uygulamaların başka sayfalara kolayca entegre edilebilmesi için uğraş veriyorlar. Bizde şimdi kullanımı giderek artan Microsoft Virtual Earth kütüphanelerinin yardımıyla web sitemiz için bir harita uygulaması hazırlayacağız.</p>
<p><span id="more-111"></span></p>
<p>Google Maps ve Microsoft Virtual Earth’ı diğer harita uygulamalarından farklı kılan en büyük özellik, iki platformun da kütüphanelerinin tamamen AJAX teknolojisiyle çalışmasıdır. Ayrıca katmanlı yapıda oluşturulan görüntüler, harita üzerine harici öğeler eklenmesine ve bu öğeler üzerinden işlem yapılmasına imkan sağlıyor. Gerekli javascript kütüphanesini sayfamıza ekledikten sonra haritayı oluşturmak, koordinatları değiştirmek ya da yeni öğe eklemeye dair bütün metodlara ulaşabiliyoruz. Bu noktada önümüze çıkan iki seçenek var. Birincisi, kullandığımız metodları javascript ile yazarak uygulamanın kullanıcı tarafında (client-side) çalıştırılması. Diğer seçeneğimiz ise yazdığımız sınıfların sunucu tarafında (server-side) saklanması, oluşturacağımız sınıflar ve metodların ajax yada javascript ile sunucudan çağrılarak kullanıcıya ulaştırılması. Sunucu tarafında çalıştıracağımız uygulamalar için bir web servisi hazırlamamız ve harita üzerinde işlemleri buradan gerçekleştirmemiz de mümkün.</p>
<p><strong>HARİTANIN KURULUMU</strong></p>
<p>Virtual Earth ile hazırlayacağımız projemizde, Microsoft’un uygulama geliştirme arayüzlerini (API) kullanacağımızdan bahsetmiştik. Bu noktada <a href="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6">http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6</a> adresindeki en yeni  kütüphaneyi referans olarak sayfamıza ekleyerek programlamaya başlayabileceğiniz gibi, bu kütüphaneyi kullanarak hazırlanan bazı paket uygulamaları kullanarak da harita uygulamanızı geliştirebilirsiniz. Buna örnek olarak açık kaynaklı PietschSoft.VE projesini  (<a href="http://www.codeplex.com/PietschSoftVE3/Release/ProjectReleases.aspx?ReleaseId=2200">http://www.codeplex.com/PietschSoftVE3/Release/ProjectReleases.aspx?ReleaseId=2200</a>) ve bu projenin gelişmiş lisanslı sürümü olan Simplovation.Web.Maps.VE (<a href="http://simplovation.com/">http://simplovation.com/</a>) paket uygulamalarını inceleyebilirsiniz. Ancak biz hazırlayacağımız uygulamada temel VE kütüphanesini kullanarak haritaları nasıl oluşturabileceğimizi göreceğiz.</p>
<p>Öncelikle javascript ile kullanıcı tarafında haritaların nasıl yaratılabileceğinden bahsedelim. Sınıf kütüphanesini sayfaya referans olarak ekledikten sonra, sayfa açıldığında yüklenecek bir fonksiyon içerisinde haritanın temeli olan VEMap nesnesi yaratarak işlemlere başlayabiliriz. VEMap nesnesi  yaratırken haritayı oluşturacağı bir DIV objesinin ID değerini parametre olarak girmemiz gerekiyor. Daha sonra yaratılan nesnenin haritayı yüklemesi için LoadMap metodunu kullanıyoruz. Tamamen opsiyonel 7 parametresi bulunan bu fonksiyon ile haritanın belirlenen DIV kontrolünde çalışmasını sağlayabiliriz. Örneğimizde parametre kullanmayıp önemli VEMap metodlarını tek tek inceleyelim. SetCenter metodu ile haritanın merkez koordinatını değiştirebiliyoruz. Enlem (latitude) ve boylam (longitude) değerleri ile yaratılan VELatLong nesnelerini alan SetCenter metodu haritada istediğimiz bölgeyi merkezde görüntülememize imkan veriyor.</p>
<p>Harita Tipleri Tablosu</p>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>Road</td>
<td>Yol haritası.</td>
</tr>
<tr>
<td>Shaded</td>
<td>Bölge kenarları gölgelendirilmiş yol haritası.</td>
</tr>
<tr>
<td>Aerial</td>
<td>Coğrafi harita.</td>
</tr>
<tr>
<td>Hybrid</td>
<td>Bölge isimlerine sahip coğrafi harita.</td>
</tr>
<tr>
<td>Oblique</td>
<td>Eğik açılı harita.</td>
</tr>
<tr>
<td>Birdseye</td>
<td>Kuşbakışı harita, yatık açılı.</td>
</tr>
<tr>
<td>BirdseyeHybrid</td>
<td>Bölge isimlerine sahip kuşbakışı harita.</td>
</tr>
</tbody>
</table>
<p>Sık kullanılan bir diğer metod olan SetZoomLevel ile harita üzerinde 1-19 değerleri arasında bir zoom seviyesi belirleyebiliyoruz. Haritamıza başlangıç ayarları yaparken en son kullandığımız method ise harita tipi ayarlamaya yarayan SetMapType. Parametre olarak VEMapStyle nesneleri alan bu fonksiyon ile coğrafi ya da yol haritası gibi görünüm seçenekleri belirleyebilirsiniz (bkz. Tablo 1). Örneğimizde Türkiyenin koordinatlarını girerek hazırladığımız web sayfası şu şekilde:</p>
<p>Açıklama: Harita Kurulumu</p>
<pre class="brush: xml; ">

&lt;html&gt;&lt;head&gt;&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6&quot;&gt;

&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;

var harita = null;

function HaritayiYukle()

{

harita = new VEMap(&#039;HaritaAlani&#039;);

harita.LoadMap();

harita.SetCenter(new VELatLong(39.28, 35.20));

harita.SetZoomLevel(4);

harita.SetMapStyle(VEMapStyle.Aerial);

}

&lt;/script&gt;&lt;/head&gt;&lt;body onload=&quot;HaritayiYukle();&quot;&gt;

&lt;div id=&#039;HaritaAlani&#039; style=&quot; width:400px; height:400px;&quot;&gt;&lt;/body&gt;&lt;/html&gt;
</pre>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim33.png" rel="lightbox[111]"><img class="aligncenter size-medium wp-image-115" title="Resim3" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim33-300x252.png" alt="" width="300" height="252" /></a><br />
Merkezini ayarladığımız haritanın ilk görünümü<strong> </strong></p>
<p>Haritanızı oluşturmayı başardıysanız, uygulamamızın bir sonraki aşamasına geçebiliriz. Harita üzerinde belirli koordinatları merkezde görüntülemek için, yukarıda bahsettiğimiz SetCenter fonksiyonunu kullanarak kullanıcımızı yönlendirebiliyoruz. Yapmanız gereken, merkeze yerleştireceğiniz koordinatları belirledikten sonra, bu değerden bir VELatLong nesnesi yaratmak ve SetCenter metodunu çağırmak. Bu çağırma işlemini javascriptle yaparsanız, harita kütüphanesinin sınıfları AJAX tabanlı çalıştığı için sayfamızda herhangi bir yenilenme (postback) işlemi gerçekleşmeyecektir. Örneğimize İstanbul ve Ankara’nın koordinatlarını döndüren iki küçük fonksiyon ile başlıyoruz. Daha sonra bir koordinat alarak harita objemizin SetCenter methodunu çağıran MerkezBelirle fonksiyonu ile işlemi tamamlıyoruz. Dizayn alanında sayfanıza ekleyeceğiniz buton, resim veya köprü (hyperlink) nesneleri ile ilgili metodları çağırabilirsiniz. Burada dikkat etmeniz gereken nokta, köprü kullanımında adres (href) değerini anchor karakteri olan “#” ile doldurarak sayfada bir yenilenme işlemini engellemenizin gerekmesi. Hazırladığımız kodları aşağıda inceleyebilirsiniz:</p>
<p>JS Fonksiyonları:</p>
<pre class="brush: javascript; ">

function istanbulKoord()

{

var koord = new VELatLong(41.20, 29);

return koord;

}

function ankaraKoord()

{ return new VELatLong(40.02, 32.61); }

function MerkezBelirle(koord)

{ harita.SetCenter(koord); }
</pre>
<p>HTML Kodlar:</p>
<pre class="brush: xml; ">

&lt;a href=&#039;#&#039; onclick=&#039;MerkezBelirle(istanbulKoord());&#039;&gt;İstanbul&lt;/a&gt;&lt;br /&gt;

&lt;a href=&#039;#&#039; onclick=&#039;MerkezBelirle(ankaraKoord());&#039;&gt;Ankara&lt;/a&gt;&lt;br /&gt;
</pre>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim12.png" rel="lightbox[111]"><img class="aligncenter size-medium wp-image-113" title="Resim1" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim12-300x186.png" alt="" width="300" height="186" /></a><br />
Haritamız DIV alanı içerisine yüklenecek.<strong> </strong></p>
<p><strong>ŞEKİL EKLEMEK</strong></p>
<p><strong></strong>Virtual Earth’ün kütüphanesinde hazır bulundurduğu bir diğer sınıf da şekiller. Harita üzerine şekil eklemek, çizim yapmak veya bir alanı seçmek için VEShape nesnelerini kullanabilirsiniz. Raptiye (PushPin), çizgi (PolyLine) ve poligon (Polygon) olarak çeşitlendirilen bu eklentilerden kullanmak istediğimizi nesne yaratırken belirliyoruz.Farklı bir katmanda oluşturulan şekil nesnelerini yaratabilmek için bir şekil tipi (VEShapeType) ve eklenecek bölgenin koordinatlarını girmemiz yeterli. Resmi değiştirilebilen şekil objeleri, kullanıcıya istediğimiz mesajı göstermek için başlık ve açıklama bilgilerine de sahip. Örneğimizde harita üzerinde belirli bir noktayı raptiye (PushPin) şekli ile işaretleyip, SetTitle ve SetDescription metodlarını kullanarak bir açıklama ekleyeceğiz. Şekil üzerinde düzenlemeleri bitirdiğimiz zaman harita nesnesinin AddShape fonksiyonu ile ekleme işlemini gerçekleştiriyoruz. Örneğimizde hazırladığımız PushPinEkle fonksiyonu ve kullanılışını aşağıda görebilirsiniz:</p>
<p>Açıklama: Şekil Eklemek</p>
<pre class="brush: javascript; ">

function PushPinEkle(koord, baslik, aciklama)

{ var sekil = new VEShape(VEShapeType.Pushpin, koord);

sekil.SetTitle(baslik);

sekil.SetDescription(aciklama);

harita.AddShape(sekil);

}
&lt;a href=&#039;#&#039; onclick=&#039;PushPinEkle(istanbulKoord(), &quot;Sariyer&quot;, &quot;Kilyos plajı&quot;);&#039;&gt;Sariyer&lt;/a&gt;&lt;br /&gt;

&lt;a href=&#039;#&#039; onclick=&#039;PushPinEkle(ankaraKoord(), &quot;TBMM&quot;, &quot;Turkiye Buyuk Millet Meclisi&quot;);&#039;&gt;TBMM&lt;/a&gt;
</pre>
<p><strong></strong></p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim2.jpg" rel="lightbox[111]"><img class="aligncenter size-medium wp-image-114" title="Resim2" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim2-300x203.jpg" alt="" width="300" height="203" /></a><br />
PushPin gibi eklentiler kullanıcı deneyimini arttırıyor.<strong> </strong></p>
<p><strong></strong></p>
<p><strong>SUNUCU KONTROLLERİ</strong></p>
<p><strong></strong></p>
<p><strong></strong>Dahili Virtual Earth sınıfları AJAX tabanlı çalıştığı için javascript ile kullanıcı tarafında interaktif bir uygulama çalıştırmayı başardık. Ancak ekleyeceğiniz sınıflar ya da geliştirmek isteyeceğiniz özellikler için kodları sunucu tarafında çalıştırmak isteyebilirsiniz. Bu durumda ilk yapmamız gereken Ajax Extensions altındaki ScriptManager objesini sayfamıza taşımak. Sonraki adım kullanacağımız .js dosyalarını ScriptReference nesnesi ile sayfaya eklemek. Sistemin çalışma mantığını aşağıdaki kodlar üzerinde inceleyebilirsiniz:</p>
<p>Açıklama: Şekil Eklemek</p>
<pre class="brush: javascript; ">

&lt;script type=&quot;text/javascript&quot;&gt;

var harita = null;

function HaritaYukle()

{

harita = new VEMap(&quot;myMap&quot;);

harita.LoadMap(new VELatLong(39.2, 35.2),6);

}

Sys.Application.add_load(HaritaYukle);

&lt;/script&gt;

&lt;body&gt;

&lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;

&lt;div&gt;

&lt;asp:ScriptManager runat=&quot;server&quot; ID=&quot;ScriptManager1&quot;&gt;

&lt;Scripts&gt;

&lt;asp:ScriptReference Path=&quot;http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6&quot; /&gt;

&lt;/Scripts&gt;

&lt;/asp:ScriptManager&gt;

&lt;div id=&quot;myMap&quot; style=&quot;position:relative; width:600px; height:400px;&quot;&gt;&lt;/div&gt;
</pre>
<p><strong></strong></p>
<p><strong>DÜNYA TURU</strong></p>
<p>Gelişimi devam eden coğrafi bilgi sistemlerinin kullanımı da gün geçtikçe artıyor. İnternette birçok firmanın yararlandığı bu uygulamalar artık sadece adres göstermek için değil, emlak, arsa tanıtımı yapmak, filo takibi gerçekleştirmek gibi değişik alanlarda kullanılıyor. Örneğin bu yıl Microsoft’un düzenlediği Imagine Cup yarışmasında sürdürülebilir çevre için harita uygulamalarının yazılımcılıar tarafından yoğunlukla kullanıldığına şahit olduk. Bunların yanında CV’sini harita üzerinde hazırlayanlar gibi kişisel amaçlara yönelik yaratıcı uygulamalar da internette yerini almakta. Bu olanaklardan yaralanmanız, sitenizi takip edenler açısından kesinlikle faydalı olacaktır.</p>
<p>p.s. Bu yazı Haziran 2008 tarihli PC Magazine dergisi makalemden derlenmiş olup, kullandığım IDE, API ve toolkitlerin yeni versiyonunu indirmenizi tavsiye ederim ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yigitkiran.net/blog/2010/02/web-sayfaniza-virtual-earth-haritalari-ekleyin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ajax Extender nesnelerinin kullanimi</title>
		<link>http://www.yigitkiran.net/blog/2010/02/ajax-extender-nesnelerinin-kullanimi/</link>
		<comments>http://www.yigitkiran.net/blog/2010/02/ajax-extender-nesnelerinin-kullanimi/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 08:34:49 +0000</pubDate>
		<dc:creator>yigit</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TR]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[ajax extender]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net ajax]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[extender]]></category>
		<category><![CDATA[pc magazine]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[visual studio]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://blog.yigitkiran.net/?p=96</guid>
		<description><![CDATA[Web programcılarının en çok vaktini çalan unsur, hiç şüphesiz sayfalarda ki küçük ayrıntılarla uğraşmaktır. Ancak detaylara verdiğiniz önem, web sitenizin kullanım kolaylığını arttırırken kullanıcıların sitenizi tercih etme sebebi de olabilir. Hatırlarsanız, geçtiğimiz aylarda projelerimizde kullandığımız “Ajax Control Toolkit” araçları, değişik alanlarda bünyesinde bulundurduğu öğeler ile bizleri büyük bir zaman kaybından kurtarıyordu. Ajax ile entegre gelen Visual Studio 2008 ise Control Toolkit araçlarının kullanımını daha da kolaylaştırarak sayfamızdaki ASP.NET nesnelerini doğrudan bu araçlara bağlamamıza imkan veriyor.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik.jpg" rel="lightbox[96]"><img class="aligncenter size-large wp-image-97" title="baslik" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik-1024x799.jpg" alt="" width="491" height="383" /></a></p>
<p>Web programcılarının en çok vaktini çalan unsur, hiç şüphesiz sayfalarda ki küçük ayrıntılarla uğraşmaktır. Ancak detaylara verdiğiniz önem, web sitenizin kullanım kolaylığını arttırırken kullanıcıların sitenizi tercih etme sebebi de olabilir. Hatırlarsanız, geçtiğimiz aylarda projelerimizde kullandığımız “Ajax Control Toolkit” araçları, değişik alanlarda bünyesinde bulundurduğu öğeler ile bizleri büyük bir zaman kaybından kurtarıyordu. Ajax ile entegre gelen Visual Studio 2008 ise Control Toolkit araçlarının kullanımını daha da kolaylaştırarak sayfamızdaki ASP.NET nesnelerini doğrudan bu araçlara bağlamamıza imkan veriyor.<br />
Bizde şimdi Ajax tabanlı bir web sitesi kayıt formu hazırlayarak, hem bu araçları öğrenmeye devam edeceğiz hem de yeni platformun bizlere sağladığı kolaylıkları tanıma fırsatı bulacağız.<span id="more-96"></span></p>
<p style="text-align: left;">Üyelik sistemine sahip web siteleri, kullanıcı adı ve şifre dışında kullanıcılarıyla ilgili daha çok bilgi edinmek isteyebilirler. Yapmamız gereken kayıt sayfasında değişik kullanıcı giriş alanları barındıran bir form oluşturmak ve bu formdan gelen verileri veritabanımıza kaydetmek. Tabi bu formu hazırlarken ASP.NET’in Ajax yeteneklerinden faydalanarak kısa zamanda profesyonel bir tasarım yapmamız mümkün. Extender diye adlandırılan Control Toolkit kontrolleri Panel, TextBox,  Image, DropDownList gibi çok kullanılan ASP.NET öğelerini geliştirerek onlara Ajax destekli özellikler katıyordu. Visual Studio 2008 ile araç kutusundan sayfamıza eklediğimiz bu nesnelerinin yanındaki bir ok tuşuyla “Extender Wizard” isimli sihirbaza erişiyor ve nesneleri otomatik olarak bu araçlara bağlayabiliyoruz.</p>
<p style="text-align: left;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim11.png" rel="lightbox[96]"><img class="aligncenter size-medium wp-image-98" title="Resim1" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim11-300x134.png" alt="" width="300" height="134" /></a></p>
<p style="text-align: center;">Eklediğiniz nesnenin yanında beliren SmartTask menüsü ile Extender Sihirbazına ulaşabilirisiniz.</p>
<p style="text-align: left;">Geçtiğimiz aylarda “Bilişim Kahramanları Aramızda” lansmanlarıyla ülkemizde tanıtımı yapılan yeni sürüm Visual Studio ile hala tanışmadıysanız, http://msdn2.microsoft.com/en-us/vstudio/products/aa700831.aspx adresinden deneme sürümü yada ücretsiz Express versiyonlarını indirmeniz mümkün. Ajax eklentileri programla birlikte geldiği için tekrar kurmanıza gerek yok fakat projemizde kullanacağımız ControlToolkit öğelerini yüklemeye ihtiyacınız olacak. VS 2008 kurulumunu gerçekleştirdikten sonra http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx?ReleaseId=4923 adresindeki ControlToolkit paketini indirip, SampleWebSite\Bin klasörü altındaki “AjaxControlToolkit.dll” dosyasını araç kutusu üzerine sürüklerseniz, yeni Ajax oyuncaklarınız otomatik olarak Visual Studio uygulamasına kurulmuş olacak. Bütün adımları tamamlayınca, bazı toolkit elemanlarını kullanarak hazırlayacağımız örnek projemize başlayabilirsiniz.</p>
<p style="text-align: center;">
<a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim42.png" rel="lightbox[96]"><img class="aligncenter size-full wp-image-101" title="Resim4" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim42.png" alt="" width="208" height="600" /></a> AjaxControlToolkit.dll dosyasını sürükleyince kurulum otomatik gerçekleşiyor.</p>
<p style="text-align: left;"><strong> İŞLEMLERE BAŞLIYORUZ</strong><br />
VS 2008 altında Ajax eklentileri hazır geldiği için yeni web sitesi oluştururken sitenizin Ajax destekli olacağını belirtmenize gerek yok. ASP.NET web sitesi oluşturduktan sonra, Toolbar’ın “Ajax Extensions” sekmesi altındaki “ScriptManager” ve “UpdatePanel” nesnelerini sayfamıza sürükleyerek sayfamıza Ajax yetenekleri kazandırıyoruz. Formumuza ekleyeceğimiz nesnelerin güzel görünmesi için bir tablo altında tutulması tercih edilir. Ancak Control Toolkit’in sahip olduğu bazı görünüm araçları tablolar ile çalışamadığı için, bütün formu bir Panel içerisinde oluşturmamız iyi olacaktır. Sayfamıza  bir Panel nesnesi ekledikten sonra boyutlarını ayarlayalım ve nesnenin yanında görünen ok tuşuna basarak “Add Extender” seçeneğine tıklayalım. Yukarıda sözünü ettiğimiz Extender sihirbazı Panel nesnesi için kullanabileceğiniz bütün araçlar ile karşınızda belirmiş olmalı.</p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim22.png" rel="lightbox[96]"><img class="aligncenter size-medium wp-image-99" title="Resim2" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim22-300x221.png" alt="" width="300" height="221" /></a> Extender Wizard ile ekleyebileceğiniz bütün araçları görebiliyorsunuz.</p>
<p style="text-align: left;">Projemizde kullandığımız panelimiz için görsel araçlardan DropShadow ve RoundedCorners öğelerini seçiyoruz. Ekleme işleminden sonra, Extender nesnesi Panel ile otomatik bağlanıyor ve özellikleri Panel’in özellikleri altından değiştirilebiliyor. RoundedCorners kontrolü panelimizin yuvarlak kenarlara sahip olmasını sağlayarak bizi resim veya JavaScript kodlarıyla uğraştırmıyor. “Corners” özelliği ile hangi köşelerin biçimini değiştirmek istediğinizi belirliyebiliyor, Radius ile açı değeri verebiliyorsunuz. DropShadow ise kullanıldığı panele gölgelendirme yapmaya yarayan bir kontrol. Burada önemli olan, yuvarlak hatlara sahip panelimize uyması için DropShadow’un Rounded özelliğini “True” yapmak ve iki nesnenin açı değerlerinin aynı olduğundan emin olmak.</p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim61.png" rel="lightbox[96]"><img class="aligncenter size-full wp-image-103" title="Resim6" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim61.png" alt="" width="474" height="630" /></a> Extender kontollerinin özelliklerine bağlı olduğu nesnenin altında ulaşabilirsiniz.</p>
<p>Formumuzun arka planını süsleyecek olan panelimizi hazırladıktan sonra bir tablo yatarak içerisine form elemanlarını eklemeye başlayabiliriz. Kişisel bilgiler ve üyelik bilgileri olarak ayırdığımız üyelik formuna ilk önce isim, mail ve doğum tarihi için gerekli TextBox nesnelerini ekliyoruz. Tekrar Extender Wizard’a girecek olursak bu nesneler için desteklenen birçok  aracın olduğunu görebiliriz. Öncelikle tasarımımız için kullanacağımız TextBoxWatermarkExtender öğesini tanıyalım. Bu kontrol ile TextBox objelerinin görünümünü değiştirebilir, başlık (caption) ifadelerinin kutunun içerisinde yer almasını ve dinamik olarak değişebilmesini sağlayabiliriz. WatermarkCssClass özelliği ile WatermarkExtender, harici bir css dosyasında veya önceden tanımladığınız stil nesnesini kullanarak TextBox’un seçili değilken nasıl görüntüleneceğini ayarlayabiliriz. Text özelliğine ise kutu seçili değilken içerisinde yazmasını istediğiniz metni girebilirsiniz. Biz örneğimizde aşağıdaki stili kullanacağız:</p>
<p>Açıklama: TextBoxWatermarkExtender  örnek stili.</p>
<pre class="brush: css; ">

.secili {
height:18px;
width:148px;
}

.secili_degil {
height:20px;
width:150px;
padding:2px 0 0 2px;
border:1px solid #BEBEBE;
background-color:#F0F8FF;
color:gray;
}
</pre>
<p><strong>ZAMANINIZ DEĞERLİDİR</strong></p>
<p>Control Toolkit araçları içerisinde en çok kullanılanlardan biri olan CalendarExtender ile tarih girişlerini birkaç tıklamayla takvim üzerinden alabilirsiniz. Kodlanması çok uzun zaman alabilecek böyle bir kontrolün hazır gelmesi gerçekten çok kullanışlı. Seçtiğiniz TextBox’a bu aracı bağladıktan sonra, kullanıcıların tıkladığında açılan bir takvim hazırlanmış oluyor. Ancak bu opsiyonu bir resim veya buton ile çalıştırmak da mümkün. Örneğimizde doğum tarihi alanının yanına bir Image nesnesi ekliyoruz. Bu işlemden sonra, CalendarExtender’in PopupButtonID özelliğine Image nesnesinin ID’sini yazarak takvimin resim tıklandığında açılmasını sağlıyoruz. Takvim eklentisinin stilini ve döndürdüğü değeri ayarlamanız da mümkün. Format özelliği ile tarihsel formatlama yaparak kutuya yazılan gün (d), ay (M) ve yıl (y) biçimini belirleyebilirsiniz (örneğin dd.MMM.yyyy).</p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim52.png" rel="lightbox[96]"><img class="aligncenter size-full wp-image-102" title="Resim5" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim52.png" alt="" width="470" height="630" /></a> CalendarExtender ile birkaç tıklamayla takviminiz hazır.</p>
<p>Kullanıcılarınızın ileride kötü sürprizlerle karşılaşmaması için kendilerine iyi bir şifre seçmesi önemlidir. Ancak çoğu kullanıcı rahatlığına düşkündür ve güvenilirliği kendisine aktarılmazsa hafızasını yoracak şifrelerden kaçınır. İşte bu noktada PasswordStrengthExtender aracı devreye giriyor ve üyelik sırasında şifre girişinin yanında belirerek yazılan şifreye dair kullanıcıya bilgi veriyor. Text ve BarIndicator isminde iki tipi bulunan bu kontrol ile yazılı veya görsel olarak şifrenin sağlamlığını aktarabilirsiniz. Örneğimizde kullandığımız Text tipindeki kontrolün Prefix özelliğine bir tanım yazısı ekliyor ve TextStrengthDescriptions özelliğine “;” karakteriyle ayrılmış güvenlik seviyelerini yazıyoruz (düşük;orta;yüksek gibi). Bu nesne toplamda 10 farklı seviyeye kadar çalışabiliyor. Ayrıca üyelik sisteminize göre tercih edilen şifre uzunluğunu (PreferredPasswordLength), içermesi gereken minimum numerik, sembol ve büyük küçük harf sayısını belirliyebilir, CalculationWeightings  özelliğiyle bu sayıların hesaplamadaki ağırlığını arada “;” karakterleri kullanarak değiştirebilirsiniz (ör: 10;5;5;10).</p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim61.png" rel="lightbox[96]"><img class="aligncenter size-full wp-image-103" title="Resim6" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim61.png" alt="" width="474" height="630" /></a> Kullanıcılarınızı şifrelerinin güvenliğine dair bilgilendirin.</p>
<p>Üyelik formlarında sık kullanılan diğer bir nesne olan CheckBox’lar için de değişik genişleme kontrolleri mevcut. Belirli CheckBox objelerinden sadece bir tanesinin seçilebilmesine izin veren MutuallyExclusiveCheckBox kontrolü bunlardan biri. Normalde çoktan seçmeli alanlar için RadioButton nesneleri kullanmaya aşinayız. Fakat bu nesneler seçildikten sonra iptal edilememesi ve bir seçeneğe sabitlenmesi nedeniyle bazı durumlarda kullanımı tercih edilmiyordu. Kullanıcıların doldurmasını zorunlu olmayan alanlarda kullandığımız CheckBox nesnelerine MutuallyExclusiveCheckBox kontrolü ekleyerek bir nevi radio button gibi davranmasını sağlayabilirsiniz. Bu sayede kullanıcı seçimini yaptıktan sonra alanı doldurmaktan vazgeçerse seçimini iptal edebilir. Örneğimizde doldurulması zorunlu olmayan cinsiyet alanında Erkek ve Bayan seçimleri CheckBox vasıtasıyla işaretleniyor. Ancak iki cinsiyeti seçmek çok anlamlı olmayacağından eklediğimiz extender kontrolü ile sadece bir tanesinin seçilebilmesini mümkün kılıyoruz. Bunu yapabilmek için farklı CheckBox’ların extender ayarlarındaki Key özelliğine aynı değeri vermeniz yeterli. Aynı Key değerine sahip CheckBox extender nesneleri arasından sadece birinin seçilmesine izin veriliyor. CheckBox için kullandığımız diğer araç ToggleButtonExtender ise nesnelerin görünümünü değiştirmemize imkan veriyor. Mevcut check box’lardan sıkıldıysanız, extender nesnesinin CheckedImageUrl ve UncheckedImageUrl özelliklerine seçtiğiniz bir resmin adresini yazarak seçimlerin resimlerle ifade edilebilmesini sağlayabiliyorsunuz.</p>
<p>Örnek projemizde Ülke, Şehir ve Semt girişlerini sağlayan DropDownList nesneleri için CascadingDropDown kontrolünü kullanabilirsiniz. Formunuzda birbirine bağıntılı DropDown öğeleri bulunuyorsa bu kontrol ile seçim sırasına göre nesneleri aktif hale getirebiliyorsunuz. Extender’i kullanmak için DropDown’ları dolduracak bir web servis hazırlamanız gerekli. Bu aşamadan sonra ParentControlID özelliğine kendinden önce gelmesi gereken nesnenin ID’sini yazarak aradaki bağlantıyı kuruyoruz. PromptText ileti seçili değilken yazacak metni belirlerken, ServiceMethod özelliğine mevcut listeyi dolduran web servis metodunun ismini yazmalısınız.</p>
<p><strong>CONTROL TOOLKİT’İ KEŞFEDİN</strong></p>
<p>Tasarladığımız kayıt formunu artık tamamlamış bulunuyoruz. ASP.NET Ajax altyapısı, hazırlanması saatler hatta günler sürebilecek birçok ayrıntıyı dakikalar içerisinde sitemize uygulamamızı sağladı. Sık kullanılan toolkit kontrollerine değindiğimiz bu proje üzerinde değişik tasarım, doğrulama ve güvenlik kontrollerini de ekleyerek daha profosyonel hale getirmeniz mümkün. ControlToolkit araçlarının kullanımını http://www.asp.net/AJAX/AjaxControlToolkit/ adresinden inceleyerek keşfetmenizi tavsiye ederim. Visual Studio 2008 ile kullanımı daha kolay hale gelen bu kontroller ile kodlaması uzun zaman alan birçok özelliği çok kısa bir sürede sitenize ekleyebiliyorsunuz. Sitenizin içeriği ve işlevselliği önemli olsa da, unutmayın ki şeytan ayrıntıda gizlidir.</p>
<p>Örnek uygulamayı indirmek için tıklayın: <a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Uygulama.zip">Uygulama</a></p>
<p>p.s. Bu yazı Mayıs 2008 tarihli PC Magazine dergisi makalemden derlenmiştir; kullandığım IDE ve toolkitlerin yeni versiyonlarını yüklemenizi tavsiye ederim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yigitkiran.net/blog/2010/02/ajax-extender-nesnelerinin-kullanimi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASP.NET Ajax kullanarak iletisim formu hazirlamak</title>
		<link>http://www.yigitkiran.net/blog/2010/02/asp-net-ajax-kullanarak-iletisim-formu-hazirlamak/</link>
		<comments>http://www.yigitkiran.net/blog/2010/02/asp-net-ajax-kullanarak-iletisim-formu-hazirlamak/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 08:08:35 +0000</pubDate>
		<dc:creator>yigit</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TR]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[contact form]]></category>
		<category><![CDATA[pc magazine]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://blog.yigitkiran.net/?p=74</guid>
		<description><![CDATA[Ziyaretçilerinizin web sitenizi önemsemesini istiyorsanız, siz de onlara önem verdiğinizi göstermelisiniz. Birçok sitede bulunan iletişim formları, kullanıcıların öneri, istek  ve şikayetlerini hızlı bir şekilde ilgililere iletebilmesine imkan tanır. Bizde bu ay ASP.NET Ajax’ın yeteneklerinden faydalanarak şık ve hızlı çalışan bir iletişim formu oluşturacağız. Genel olarak kullanıcıların yazdıklarını belirlenen bir kişiye mail atarak ulaştıran iletişim formları, bizim yapacağımız örnekte bir adım öteye giderek bu işlemin hatasız bir biçimde sonlanmasını sağlayacak.

Senaryoyu biraz daha genişletip, iletişime geçilecek insan sayısını arttırmak da mümkün. Biz örneğimizde dergimiz yazarlarının listesine sahip bir formda kullanıcının istediği yazara hitap edebileceği bir uygulama dizayn edeceğiz. Buradaki problem yazarların aldığı eleştirilere cevap verebilmesi için mesajı yazan kullanıcının iletişim bilgilerinin de iletilmesi gerekliliği. Mesaj göndermek isteyen kullanıcının kendisine cevap verilebilmesi için adı, soyadı ve e-mail adresi gibi bilgilerinin mutlaka girilmesini bekliyoruz. ASP.NET’in formlardaki alanları kontrol edip geçerliliğini onaylayan bazı “Validator” nesneleri bu konuda bize yardım edebilirler.  Bu nesneler bir yazı kutusunun (text-box) boş bırakılmaması gerektiğini, yada girilen e-mail adresinin formata uymadığını kullanıcıya hoş bir dille hatırlatıp iletişim problemleri yaşanmasını engelliyorlar.

Blogumu takip eden yada Ajax ile ilgilenen biriyseniz, salt ASP.NET formlarının ne kadar can sıkıcı olduğunu  düşünebilirsiniz. Özellikle alanların hatalarını kontrol eden bir form olduğu için, böyle durumlarda sayfanın yenilenmesi ve bilgilerin kaybolması gibi sorunlar sizinle iletişime geçmek isteyen kullanıcınız için iyi bir deneyim olmayacaktır. Ajax ile klasik formları daha interaktif hale getirmek için yapmanız gereken ilk iş kullandığınız Visual Studio 2005 yada Web Developer Express Edition’a gereken http://ajax.asp.net adresindeki “Ajax Extensions” paketini indirerek kurmak. Eğer VS 2008 versiyonuna terfi ettiyseniz, ilgili kütüphaneler hazır geldiği için bir sonraki adıma geçebilirsiniz.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik.gif" rel="lightbox[74]"><img class="aligncenter size-large wp-image-76" title="baslik" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik-1024x685.gif" alt="" width="491" height="329" /></a></p>
<p>Ziyaretçilerinizin web sitenizi önemsemesini istiyorsanız, siz de onlara önem verdiğinizi göstermelisiniz. Birçok sitede bulunan iletişim formları, kullanıcıların öneri, istek  ve şikayetlerini hızlı bir şekilde ilgililere iletebilmesine imkan tanır. Bizde bu ay ASP.NET Ajax’ın yeteneklerinden faydalanarak şık ve hızlı çalışan bir iletişim formu oluşturacağız. Genel olarak kullanıcıların yazdıklarını belirlenen bir kişiye mail atarak ulaştıran iletişim formları, bizim yapacağımız örnekte bir adım öteye giderek bu işlemin hatasız bir biçimde sonlanmasını sağlayacak.</p>
<p>Senaryoyu biraz daha genişletip, iletişime geçilecek insan sayısını arttırmak da mümkün. Biz örneğimizde dergimiz yazarlarının listesine sahip bir formda kullanıcının istediği yazara hitap edebileceği bir uygulama dizayn edeceğiz. Buradaki problem yazarların aldığı eleştirilere cevap verebilmesi için mesajı yazan kullanıcının iletişim bilgilerinin de iletilmesi gerekliliği. Mesaj göndermek isteyen kullanıcının kendisine cevap verilebilmesi için adı, soyadı ve e-mail adresi gibi bilgilerinin mutlaka girilmesini bekliyoruz. ASP.NET’in formlardaki alanları kontrol edip geçerliliğini onaylayan bazı “Validator” nesneleri bu konuda bize yardım edebilirler.  Bu nesneler bir yazı kutusunun (text-box) boş bırakılmaması gerektiğini, yada girilen e-mail adresinin formata uymadığını kullanıcıya hoş bir dille hatırlatıp iletişim problemleri yaşanmasını engelliyorlar.</p>
<p>Blogumu takip eden yada Ajax ile ilgilenen biriyseniz, salt ASP.NET formlarının ne kadar can sıkıcı olduğunu  düşünebilirsiniz. Özellikle alanların hatalarını kontrol eden bir form olduğu için, böyle durumlarda sayfanın yenilenmesi ve bilgilerin kaybolması gibi sorunlar sizinle iletişime geçmek isteyen kullanıcınız için iyi bir deneyim olmayacaktır. Ajax ile klasik formları daha interaktif hale getirmek için yapmanız gereken ilk iş kullandığınız Visual Studio 2005 yada Web Developer Express Edition’a gereken <a href="http://ajax.asp.net/">http://ajax.asp.net</a> adresindeki “Ajax Extensions” paketini indirerek kurmak. Eğer VS 2008 versiyonuna terfi ettiyseniz, ilgili kütüphaneler hazır geldiği için bir sonraki adıma geçebilirsiniz.</p>
<p><span id="more-74"></span></p>
<p><strong>Form Hazırlıkları</strong></p>
<p>Hazırlayacağımız formdaki bütün elemanların Ajax ile yenilenme (postback) işlemine tabi tutulmadan güncellenebilmesi için, araç kutusundaki ScriptManager ve UploadPanel nesnelerinizi sayfaya eklemeyi unutmayın. UploadPanel içerisinde bulunan nesnelerin Ajax ile desteklendiğini, yine de bazı elemanların AutoPostBack özelliğini “True” yaparak uyum sağlaması gerektiğini hatırlatarak, formumuzu oluşturmaya başlayalım. Örneğimizde, iki sütuna ayrılmış bir tablo oluşturarak, içinde dergi yazarlarının isimleri ve mail adreslerinin tutulduğu bir DropDownList’i ekliyoruz. Bu listenin altına kullanıcının bilgilerini girmesini istediğimiz Ad-Soyad, E-mail adresi, ve opsiyonel bir veri olarak URL alanını ekliyoruz. Formun en altına, mesaj ve konu alanları için TextBox nesneleri yerleştiriyoruz. Buradaki mesaj alanının TextMode özelliğini “MultiLine” ve row sayısını 10 olarak belirlersiniz, kullanıcılarınıza mesaj yazmaları için geniş bir alan yaratmış olursunuz. Son olarak bir gönder butonu, ve bu butonun altına gönderme işleminin sonuçlandığını bildirecek olan bir Label nesnesi ekleyerek formu tamamlıyoruz.</p>
<p><strong>Alanların Kontrolü</strong></p>
<p>İletişim formumuzun hedeflerinden biri de doldurulması zorunlu olan alanların dinamik kontrolü ve hatalı olanların kullanıcıya bildirilmesiydi. Bu işlem için araç kutusunun Validation bölümündeki araçları kullanacağız. Çeşitli Validator nesnelerini alanlara bağlayarak bu alanların doldurululduğunu (RequiredFieldValidator), aldığı değerlerin belirli bir aralıkta olduğunu (RangeValidator) veya belirli bir formata uymasını (RegularExpressionValidator) kontrol edebilirsiniz. Örneğimizde, doldurulması zorunlu olan yazar seçimi, isim, e-mail, konu ve mesaj alanları için RequiredFieldValidator nesnelerini sayfamıza ekliyoruz. Her bir nesnenin ControlToValidate özelliğinde hangi alanı kontrol etmesini istiyorsak bunu seçerek ilişkilendirmesini yapmamız lazım. Ayrıca “ErrorReport” ve “Text” özelliklerine yazdığımız hata mesajları ile kullanıcının nerede hata yaptığını görmesini sağlayabiliriz.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim0.png" rel="lightbox[74]"><img class="aligncenter size-full wp-image-77" title="resim0" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim0.png" alt="" width="335" height="621" /></a><br />
Validation nesnesini formdaki alanlardan birine bağlamalısınız.</p>
<p>Yazarlarımızın kullancılara cevap verebilmesi için E-Mail alanı son derece önemli. Kullanıcının girdiği adresin düzgün yazılıp yazılmadığını yine validator nesneleri ile kontrol etmemiz mümkün. Araç kutusundan sayfamıza ekleyeceğimiz bir RegularExpressionValidator nesnesi, bağlandığı alana istenen formatta yazı girilmesini denetliyor. Sayfamızdaki e-mail alanında bu nesneyi kullanabilmek için ControlToValidate özelliğinden ilgili TextBox nesnesini seçmeli, ErrorReport ve Text özelliklerine hata mesajlarını yazmalı ve ValidationExpression özelliğine tıkladığınızda çıkan menüden  “Internet E-mail Address” seçeneğini işaretlemeliyiz. Bu eklentiyle formdaki e-mail alanı kontrol edilecek ve düzgün bir e-mail adresi girilmediğinde (ör: boşluklu veya @ karakteri olmayan) kullanıcıya hata mesajı döndürülecek.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim31.png" rel="lightbox[74]"><img class="aligncenter size-full wp-image-79" title="resim3" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim31.png" alt="" width="354" height="242" /></a><br />
RegularExpressionValidator değişik türlerdeki alanları denetliyebiliyor.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim41.png" rel="lightbox[74]"><img class="aligncenter size-medium wp-image-80" title="resim4" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim41-300x276.png" alt="" width="300" height="276" /></a><br />
Validation nesneleri eklendikten sonra dizayn sayfamızın görüntüsü.</p>
<p>Email Gönderimi</p>
<p>Farkındaysanız Ajax tabanlı ve birçok denetimin kullanıldığı bir form oluşturduk ve tek satır kod yazmadık! Visual Studionun bizlere sunduğu araçlar ile kısa sürede hazırladığımız formumuzun e-mail gönderebilmesi için özlediğimiz kod ekranına girebiliriz. Bu noktada .Net Framework altındaki Mail sınıfının fonksiyonları bize yardımcı olacak, ama önce kod sayfasının en üstünde</p>
<p>using System.Net.Mail;</p>
<p>deklerasyonunu yaparak bu sınıf altındaki metodları sayfamıza dahil etmeliyiz. Daha sonra mail göndermek için gereken kodları Gönder butonunun click olayınının içerisine yazabiliriz. Dizayn ekranında butona çift tıklayınca bu kod bloğu sizin için oluşturulacaktır. Önce validator nesnelerinin isValid özelliklerini kontrol edip, formdaki bütün alanlar denetimden geçebilmiş mi diye bakıyoruz.<br />
Sonraki aşama gerekli verileri alıp maili göndermek olacaktır. Yazmamız gereken kod bu şekilde:</p>
<pre class="brush: c#; ">

protected void Button1_Click(object sender, EventArgs e)
{
        //Doldurulması zorunlu alanların kontrolü:
        if (RequiredFieldValidator1.IsValid &amp;&amp; RequiredFieldValidator2.IsValid &amp;&amp; RegularExpressionValidator1.IsValid &amp;&amp; RequiredFieldValidator4.IsValid &amp;&amp; RequiredFieldValidator5.IsValid)
        {
            /*Yeni mail nesnesi yaratıp, kullanıcının mail adresini ve sectigi yazarin DropDownList&#039;ten dönen mail adresini ekliyoruz */
            MailMessage MyMail = new MailMessage(TextBox2.Text, DropDownList1.SelectedItem.Value);

            //Mailin konusunu ekliyoruz.
            MyMail.Subject = TextBox4.Text;

            /*Maile yazılacak mesajın üst kısmına kullanıcının isim ve url bilgilerini ekliyoruz */
            string gonder = &quot;İsim: &quot; + TextBox1.Text + &quot;\nUrl: &quot; + TextBox3.Text + &quot;\nMesaj:\n&quot; + TextBox5.Text;
            MyMail.Body = gonder;

            /*Yeni bir mail client yaratıp, sunucumuzdan maili ilgili kişiye gönderilmesini sağlıyoruz */
            try
            {
                SmtpClient MyClient = new SmtpClient(&quot;localhost&quot;, 25);
                MyClient.Send(MyMail);
            }
            catch (Exception ex)
            {
   /*Mail gönderme işlemi sırasında oluşan sunucu hatalarını kullanıcıya bilgilendirmeliyiz.*/
                Label2.Text = &quot;Sunucudaki bir hata nedeniyle mail gönderilemedi.&quot;;
                return;
            }

            //Kullanıcıya işlemin tamamlandığına dair bir yazı gösteriyoruz.
            Label2.Text = &quot;Mesajınız Gönderilmiştir!..&quot;;

            //Yeni bir mesaj için formdaki bütün alanları temizliyoruz.
            DropDownList1.SelectedIndex = 0;
            TextBox1.Text = &quot;&quot;;
            TextBox2.Text = &quot;&quot;;
            TextBox3.Text = &quot;&quot;;
            TextBox4.Text = &quot;&quot;;
            TextBox5.Text = &quot;&quot;;

        }
    }
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim21.png" rel="lightbox[74]"><img class="aligncenter size-medium wp-image-78" title="resim2" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim21-300x255.png" alt="" width="300" height="255" /></a><br />
İletişim formumuz tepkisiz kullanıcılara isyan ediyor J</p>
<p><strong>Toolkit Araçlarını Kullanmak</strong></p>
<p>Tebrikler, artık elimizde kullanabileceğimiz başarılı bir iletişim formumuz var. Ancak yapabileceklerimiz bunlarla sınırlı değil. Önceki workshoplarda bahsettiğimiz control toolkit elemanlarını sayfamıza ekleyerek, kullanıcıların aldığı statik hata mesajlarını görsel açıdan daha güzel bir hale getirebiliriz. Bir hatırlatma yaparsak, Ajax Extensions ortaya çıktıktan sonra yayınlanan control toolkit kütüphanesi, internette yaygın bir şekilde kullanılan ajax uygulamalarını mevcut altyapının üzerine inşa edilen çeşitli araçlarla ASP.NET projelerimize eklememize imkan tanıyordu. Bu araçları kurmak için toolkit kütüphanesini <a href="http://www.codeplex.com/AtlasControlToolkit">http://www.codeplex.com/AtlasControlToolkit</a> adresinden indirmeniz gerekmekte. Ardından Visual Studio araç kutusunda yeni bir sekme yaratıp, sağ tuş ile “Choose Items” komutuna tıkladıktan sonra açılan arayüzdeki Browse tuşuna tıklamalı, indirdiğiniz dosyalar arasında yer alan AjaxControlToolkit.dll dosyasını eklemelisiniz.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim51.png" rel="lightbox[74]"><img class="aligncenter size-medium wp-image-81" title="resim5" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim51-300x285.png" alt="" width="300" height="285" /></a><br />
ControlToolkit araçlarıyla sayfamız daha interaktif bir görünüme kavuştu.</p>
<p>Artık dizayn sayfamıza geri dönebiliriz. Eklediğimiz toolkit araçları içerisindeki ValidationCalloutExtender, sayfamızda bulunan Validation nesnelerinin görünümünü değiştirecek özelliklere sahip. Bu aracı sürükleyerek sayfada kullandığımız her Validation nesnesinin yanına bir tane ekleyelim. Önceden denetimden geçemeyen alanların yanında kırmızı bir uyarı çıkaran Validation nesneleri, bu toolkit aracıyla birlikte kullanıcıya popup uyarılar göstererek iletişim formumuza profesyonel bir görünüm katacak. Bütün denetleyicilerin yanına bir ValidationCalloutExtender ekledikten sonra bu nesnelerin “TargetControlID” özelliğinden bir denetleyici seçerek birbirleriyle ilişkilendirin. Artık Validation nesneleri uyarı göstermek istediğinde, bağlı olduğu ValidationCalloutExtender çalışarak şık görünümlü bir popup uyarı gösterecek.  Öte yandan önceki tasarımımızda Validation nesnelerimizin Text özelliklerine yazdığımız yazılar hala gözükmeye devam edecektir. Yazı ve popup uyarılarının aynı anda ortaya çıkması güzel bir görüntü oluşturmayacağı için, validation nesnelerinin Text özelliğindeki yazıyı silebilir, yada bir * karakteriyle küçük bir uyarı vermeye devam etmesini sağlayabilirsiniz. Extender nesneleri ise Validation objelerinin ErrorMessage özelliğinde bulunan yazıyı okuyacaklar.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim6.png" rel="lightbox[74]"><img class="aligncenter size-medium wp-image-82" title="resim6" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/resim6-254x300.png" alt="" width="254" height="300" /></a><br />
ValidationCalloutExtender nesneleri eklendikten sonra dizayn sayfamızın görünümü.</p>
<p><strong>İletişime Geçin</strong></p>
<p>Planladığımız iletişim formunu Ajax’ın imkanları ile tasarlayıp, Control Toolkit araçlarıyla görsel açıdan güzel bir hale getirdik. Hazırladığımız interaktif sayfa, ziyaretçileriniz ile daha iyi iletişim kurabilmenize olanak sağlarken, sitenizin prestijini arttıracaktır. Çeşitli araçlara sahip olan toolkit’i ASP.NET Ajax ile yaptığınız bütün projelerde gözden geçirmenizi tavsiye ederim.</p>
<p>p.s. Bu yazi Nisan 2008 tarihli PC Magazine makalemden derlenmistir; kullandigim IDE ve toolkitlerin yeni sürümlerini takip etmenizi tavsiye ederim :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yigitkiran.net/blog/2010/02/asp-net-ajax-kullanarak-iletisim-formu-hazirlamak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Ajax Kullanarak Facebook Uygulamasi Gelistirmek</title>
		<link>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-kullanarak-facebook-uygulamasi-gelistirmek/</link>
		<comments>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-kullanarak-facebook-uygulamasi-gelistirmek/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 07:43:57 +0000</pubDate>
		<dc:creator>yigit</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TR]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[facebook application]]></category>
		<category><![CDATA[pc magazine]]></category>

		<guid isPermaLink="false">http://blog.yigitkiran.net/?p=54</guid>
		<description><![CDATA[Türk halkı olarak gösterdiğimiz ilgi, İngiliz The Sunday Times gazetesine bile haber olan; kullanıcı sayımızı bir ayda %466 artırarak özel bir rekor kırdığımız ve şu anda 3 milyona yaklaşan Türk üyesi bulunan Facebook üzerinde ASP.NET AJAX kullanarak uygulama geliştirebilmek hakkında yazmak istiyorum :)]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik2.png" rel="lightbox[54]"><img class="aligncenter size-full wp-image-56" title="baslik2" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/baslik2.png" alt="" width="614" height="367" /></a></p>
<p>Türk halkı olarak gösterdiğimiz ilgi, İngiliz The Sunday Times gazetesine bile haber olan; kullanıcı sayımızı bir ayda %466 artırarak özel bir rekor kırdığımız ve şu anda 3 milyona yaklaşan Türk üyesi bulunan Facebook üzerinde ASP.NET AJAX kullanarak uygulama geliştirebilmek hakkında yazmak istiyorum :)</p>
<p>Kullanıcısı sayısı bu kadar fazla olunca, Facebook platformuna özel uygulamalar geliştirmek pek çok yazılımcının ilgilendiği bir konu haline geldi. Hatta uygulamalar üzerinden verilen reklamlar ile insanlar para kazanmaya başlayınca, bu alanda bir pazar oluşmaya başladı ve bu uygulamaları geliştiren şirketlerin milyon dolarlar seviyesindeki fiyatlarla satıldığına tanıklık ettik.</p>
<p>Ülkemizde ise birçok insan, hazırladığı çeşitli uygulamalar ile Facebook dünyasını renklendirmeye devam etmekte. Bunların çoğu php ile hazırlansa da, internet üzerinde yer alan çok güçlü API ve ASP.NET sınıf kütüphaneleri  ile bu tip uygulamaları kısa sürede geliştirebilmek olası.</p>
<p>Bizde bu ayki dersimizde bu kütüphaneleri kullanara nasıl kendi Facebook uygulamamızı geliştirebileceğimizi göreceğiz. Eğer sizde Facebook üyesiyseniz ve yeterince ilkokul  arkadaşınızı bulduysanız, artık sıkılmaya başlamış olabilirsiniz. Peki  farklı uygulamalar ile Facebook’u renklendirmeye hazır mısınız?</p>
<p><span id="more-54"></span></p>
<p><strong>Facebook Uygulama Geliştirme Alt Yapısı</strong></p>
<p>Facebook’un güçlü uygulama geliştirme altyapısı bizlere birçok imkan sunuyor. Bu altyapıda web sayfalarını oluşturmak için FBML diye adlandırılan bir dil, veritabanı işlemleri için FQL sorgu sistemi ve FBJS adında bir javascript yorumlayıcısı gibi özgün araçlar mevcut. Ancak biz bu altyapıyı zaten kullanan bir ASP.NET sınıf kütüphanesi kullanacağımız için bu araçların hepsinin kullanımını öğrenmemize gerek kalmıyor. Bütün bu uygulama geliştirme bilgilerine geçmeden önce Facebook sayfa yapılarına değinelim. Geliştireceğimiz uygulamalar temel olarak 2 sayfa yapısında gözükebilir; Canvas sayfa yapısı ve Profil sayfa yapısı.</p>
<p>Canvas sayfalar, Facebook çerçevesi içinde kalan geniş alanda uygulamanızın çalışmasına izin verir. Bunu size ait bembeyaz bir tuval olarak düşünübilirsiniz. Üstelik bu tuvalin içinde FBML kullanmak zorunda değilsiniz. Facebook burada IFRAME uygulamalara da izin vermektedir, yani herhangi bir web sayfanızı olduğu gibi burada gösterebilirsiniz. Genellikle, uygulama eklendikten sonra gelen davetiye gönderme sayfaları, yada profil sayfasına sığmayan uygulamalar bu canvas sayfalarında yer alırlar.</p>
<p>Bir diğer seçeneğimizde profil sayfasını kullanmak. Hepinizin aşina olduğunu düşündüğüm, uygulamanın profil sayfanızda bir kutu içerisinde çalıştığı seçenek bu. Profil sayfaları iki bölümden oluşmakta; 200 piksel boyutundaki dar alan (narrow) ve 400 piksel boyutundaki geniş alan (wide). İşte bu bölümlere FBML kullanarak uygulama geliştirebilir, “Profile-action” diye tabir edilen, resimlerin altındaki linkler bölümüne de kendi uygulamanızın bir bağlantısını ekleyebilirsiniz.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim1.png" rel="lightbox[54]"><img class="alignnone size-full wp-image-55" title="Resim1" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim1.png" alt="" width="677" height="239" /></a><br />
Mevcut Facebook sayfa yapıları.</p>
<p>Uygulamamızı nerede geliştirebileceğimizden bahsettik, şimdi nasıl geliştirebiliriz buna değinelim. Öncelikle “Developer” uygulamasını <a href="http://www.facebook.com/developers/">http://www.facebook.com/developers/</a> adresinden ekleyerek gerekli kayıt işlemlerine başlamalıyız. Uygulama sayfasındaki “Set Up New Application” butonuna tıklayarak, formu doldurmaya başlayın. “Optional Fields” içerisindeki “Callback Url” alanına uygulamamızın çalıştığı adresi yazmamız gerek.</p>
<p>Geliştirme esnasında uygulamamızın çalışabilmesi için buraya “<a href="http://localhost/ornek/">http://localhost/ornek/</a>” gibi lokal bir adres de yazabiliriz. Uygulamanızda IFRAME kullanacaksanız “Application Type” alanından bu seçiminizi belirmeniz gerekiyor. “Can your application be added on Facebook?” sorusuna “Yes” cevabı vererek, açılan formun “Post-Add Url” alanına uygulama eklendiğinde açılacak sayfanın adresini, “Side Nav Url” alanına menüdeki butonuna basıldığında gitmesi gereken adresi vermelisiniz ve bütün bunlar yine lokal adresler olabilir. Kayıt işlemleri sonucunda edineceğimiz API KEY ve SECRET anahtarlarını ileride uygulamamızda gereken yerlere ekleyerek, Facebook ile beraber çalışabilmesini sağlayacağız.</p>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim2.png" rel="lightbox[54]"><img class="alignnone size-full wp-image-57" title="Resim2" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim2.png" alt="" width="636" height="205" /></a><br />
Uygulamamızın kaydı tamamlandıktan sonra gerekli anahtarlara ulaşabiliriz.</p>
<p>Sırada uygulamamızı geliştirmek için kullanacağımız sınıf kütüphanelerini Visual Studio’ya ekelemek var. ASP.NET kullanarak Facebook uygulamaları geliştirmek için Facebook.NET, VS Starter Kit, Client Library for VB.NET ve Developer Toolkit gibi değişik donatılar mevcut. Biz bunlardan için en çok kullanılan “Facebook Developer Toolkit” platformunu seçtik. Yapmamız gereken ilk iş <a href="http://www.codeplex.com/FacebookToolkit">http://www.codeplex.com/FacebookToolkit</a> adresinden gerekli binary dosyaları indirmek. Bu platformun en büyük avantajları, hem web uygulamaları hemde masaüstü uygulamalar için kütüphaneler ve araçlar içeriyor olması.</p>
<p>İndirme işleminden sonra Visual Studio’yu açmaya hazırız. Önce yeni bir “Web Site” yaratıp, daha sonra “Solution Explorer” bölmesine sağ tuşla tıklayarak “Add Reference -&gt; Browse” sekmesi altından indirdiğimiz Facebook.dll ve Facebook.WebControls.dll kütüphanelerini projemize eklemeliyiz. Developer Toolkit ile uygulama geliştirmeyi örneklerle açıkladıktan sonra, bu kütüphaneye özgün araçların kullanımına da değineceğiz.</p>
<p><strong>Örnek Uygulama</strong></p>
<p>Blogumu takip edenler, bir önceki yazımda anlattığım <a href="http://blog.yigitkiran.net/index.php/2010/02/aspnet-ajax-ile-dinamik-rss-okuyucu-hazirlamak/" target="_blank">ASP.NET Ajax ile RSS Okuyucu</a> uygulamasını hatırlayabilirler. Şimdi örnek göstereceğimiz Facebook uygulamalarında da bu projemizi kullanacağız. Çalışma biçimini hatırlatmak amacıyla bu uygulamayı bir daha gözden geçirmek gerekirse, hazırladığımız bir RssOku() metodu, bir tablo içerisindeki “Label” nesnesinin text özelliğini değiştirip, bu işlemi Page_Load olayı ve Timer nesnesinin Tick olayında uygulayıp, RSS kaynağını anlık takip edebiliyorduk.</p>
<p>Daha önce Facebook uygulamalarının canvas veya profil sayfalarında çalışabileceğinden bahsetmiştik. Şimdi çalışma biçimleri farklı olan bu iki sayfa yapısıyla ilgili örneklerimize bakalım.</p>
<p><strong>Canvas Uygulaması</strong></p>
<p>Bu sayfa tipinde IFRAME ve FBML kullanma şansımızın olduğunu hatırlamakta fayda var. Her ne kadar FBML kısa sürede modüler uygulamalar hazırlamamıza izin versede, IFRAME ile alışık olduğumuz şekilde web sayfası geliştirme özgürlüğümüz var. Bu nedenle örneğimizde IFRAME kullanıyoruz. Öncelikle web sayfamızın kod dosyasını açarak, sayfanın kaynağını varsayılan asp.net “Page” sınıfı yerine, “CanvasIFrameBasePage” isimli toolkit üst sınıfından türetilmesini sağlamalıyız. Bundan sonra yapmamız gereken, Page_Load olayı içerisine kayıt işleminde aldığımız API KEY ve SECRET anahtarlarını üst sınıfımızın Api ve Secret özelliklerine atamak, ve üst sınıfımızın Page_Load olayını çağırmak.</p>
<p>Artık sayfanız facebook iletişim kurabilecek hale geldi. Yalnız login olmadan yapılan çağrılarda sorun yaşamamak için, bundan sonra kullanacağınız metodların geri yükleme esnasında çalışmamasını sağlamalısınız.  Bunuda devam eden kodları bir if(!IsPostBack) ifadesi içerisine yazarak sağlayabilirsiniz. Unutulmaması gereken nokta, Ajax ile verilerin anlık güncellenmesini sağlamak için, sayfamıza eklediğimiz bir Timer objesi olmalı ve bu objenin Tick olayında da RssOku() methodunu tekrar kullanmalıyız. Bir canvas uygulanması için gereken işlermleri aşağıdaki sayfa kodlarından inceleyebilirsiniz:</p>
<p>Canvas Uygulaması Kodları</p>
<pre class="brush: csharp; ">

//Canvas sayfalarda miras alınan sınıfı aşağıdaki gibi değiştirdik.&lt;/em&gt;

public partial class _Default: CanvasIFrameBasePage

{

//Sayfamız yüklendiğinde çalışacak olan olay

protected void Page_Load(object sender, EventArgs e)

{

/* Üst sınıfımızın özelliklerini kayıt işleminde aldığınız anahtarlar ile tanımlayıp, kendi Page_Load olayını çağırıyoruz. */

base.Api = &quot;APIKEY&quot;

base&lt;/em&gt;&lt;em&gt;.Secret = &lt;/em&gt;&lt;em&gt;&quot;SECRETKEY&quot;

base&lt;/em&gt;&lt;em&gt;.Page_Load(sender, e);

/* Sayfaların postback olmadığını kontrol ettikten sonra kodlamaya başlayabiliriz. */

if (!IsPostBack)

{

/* Rss okuyucu projemizde, sayfamızdaki bir label objesinin text değerini RssOku metodumuzdan dönen string ifadeye bağlıyorduk. Bu işlemi şimdi burada yapıyoruz. */

Label2.Text = RssOku();

}

}
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim3.png" rel="lightbox[54]"><img class="alignnone size-full wp-image-58" title="Resim3" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim3.png" alt="" width="842" height="556" /></a><br />
IFRAME sayesinde geçen ayki uygulamamızı aynen çalıştırabiliyoruz.</p>
<p><strong>Profil uygulaması</strong></p>
<p>Profilimizdeki kutularda yer alacak uygulamamızda gerçekleştirdiğimiz işlemleri FBML dilinin kullanıldığı bir arayüzde göstermeliyiz. Ayrıca bu arayüzü, geniş ve dar profil kutularına göre ayrı ayrı tasarlamamız gerekmekte. Bilmeniz gereken iki önemli FBML etiketi var; dar alandaki arayüz için &lt;fb:narrow&gt; ve geniş alan için &lt;fb:wide&gt; kullanacağız. Toolkit ile gelen “Facebook Service” nesnesi sayesinde, uygulamamız için gereken öğelere erişebilir, ve arayüzde göstermek istediklerimizi bu etiketler arasına  HTML olarak da yazabiliriz.</p>
<p>Geliştirmeye başlamaya hazırsanız, hemen yeni bir “Web Site” projesi oluşturun ve referanslarını ekleyin. Bu sefer kullanacağımız sayfaların türetildiği üst sınıfları değiştirmemize de gerek yok. Yapmamız gerekenler, bir Facebook Service nesnesi yaratmak, bu nesnenin özelliklerine kayıt esnasında aldığımız API KEY, SECRET anahtarlarını, session_key, auth_token ve userId gibi profil sayfalarından alınan bilgileri örneğimizdeki gibi atamak. Servisimizi hazırladıktan sonra, canvas uygulamasında olduğu gibi, postback kontrolü yapmalı, ve sayfamazla ilgili kodları yazmaya başlamalıyız. En sonunda arayüzde gösterilecek öğeleri bu servisin “setFBML” metodunu kullanıp uygun bir şekilde profil sayfalarına aktarabiliriz. Örneğimizde bir tablo kullanıp bunun içerisine uygulama sayfasındaki Label nesnesinin text değerini vererek, okunan rss kaynağı içerisindeki bilgilerin görünmesini sağlayacağız. Profil uygulamasının kodları bu şekilde geliştiriyoruz:</p>
<p>Profil Uygulaması Kodları</p>
<pre class="brush: csharp; ">

//Facebook Servisi nesnesi yaratıyoruz.

Facebook.Components.FacebookService _fbService = new Facebook.Components.FacebookService();

protected void  Page_Load( object  sender,  EventArgs e)

{

//yarattığımız nesneye gerekli anahtarları verelim.

_fbService.ApplicationKey = &quot;---buraya sizin app keyiniz gelecek---&quot;;

_fbService.Secret = &quot;---buraya sizin secret keyiniz gelecek---&quot;;

//Nesnemize uygulamamızın bir masaüstü uygulaması olmadığını hatırlatmamız gerek.

_fbService.IsDesktopApplication = false;

//Web uygulamalarında kimlik işlemleri için bazı verileri tarayıcıdan çekmeliyiz.

string sessionKey = Session[&quot;facebook_session_key&quot;] as String;

string userId = Session[&quot;facebook_userId&quot;] as String;

string authToken = Request.QueryString[&quot;auth_token&quot;];

//Aşağıda bazı kimlik kontrolleri yapıyoruz, session süresi dolmuşsa kullanıcıyı login ekranına yönlendiriyoruz.

if(!String.IsNullOrEmpty(sessionKey))

{

_fbService.SessionKey = sessionKey;

_fbService.UserId = userId;

}

else if (! String.IsNullOrEmpty(authToken))

{

_fbService.CreateSession(authToken);

Session[&quot;facebook_session_key&quot;] = _fbService.SessionKey;

Session[&quot;facebook_userId&quot;] = _fbService.UserId;

Session[&quot;facebook_session_expires&quot;] = _fbService.SessionExpires;

}

else

{

Response.Redirect(@&quot;http://www.facebook.com/login.php?api_key=&quot; + _fbService.ApplicationKey + @&quot;&amp;amp;amp;v=1.0&quot;);

}

//Sayfamızın postback kontrolünü yaptıktan sonra gereken kodları yazabiliriz.

if (!IsPostBack)

{

//Rss kaynağından verileri çekiyoruz.

Label2.Text = RssOku();

//işte burada geniş ve dar profil kutuları için arayüz FBML kodunu yazmamız gerekiyor.

_fbService.SetFBML(&quot;&lt;fb:wide&gt;&lt;table width=\&quot;300\&quot; border=\&quot;0\&quot;&gt;&lt;tr&gt;&lt;td&gt;Forumlarımızdaki son başlıklar:&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&quot; + Label2.Text + &quot;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=\&quot;http://www.csoftlab.com/C-Organizer%20awards/pcm_logo.gif\&quot; /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/fb:wide&gt;&lt;fb:narrow&gt;&quot; + Label2.Text + &quot;&lt;/fb:narrow&gt;&quot;, &quot;&quot;,&quot;&quot;);

}

}
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim4.png" rel="lightbox[54]"><img class="alignnone size-medium wp-image-59" title="Resim4" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim4-300x244.png" alt="" width="300" height="244" /></a><br />
PC Magazine Forumları heryerde!</p>
<p><strong>Developer Toolkit Araçları</strong></p>
<p>Facebook Developer Toolkit aynı zamanda kendine özgün araçlarla birlikte geliyor. Dizayn sayfanıza sürükleyerek kullanabileceğiniz bu araçları eklemek için, Default.aspx dizayn sayfanızdayken “Toolbox” üzerinde sağ tuşla tıklayıp, “Choose Items -&gt; Browse” üzerinden Facebook.WebControls.Dll kütüphanesini burayada eklemek. Şimdi PhotoAlbum, FriendList ve UserInfo isimli üç yeni araca sahibiz. Bu araçları dizayn sayfamıza sürükledikten sonra, nesnelerin gerekli özelliklerini Facebook Service nesnesindeki özelliklere bağlayarak kullanabiliriz.</p>
<p>Toolkit Araçları Kullanımı:</p>
<pre class="brush: csharp; ">

/* FriendList nesnesi öğelerini Facebook Service nesnesinden çekiyoruz. Eğer PhotoAlbum kullanırsanız GetPhotos() ve UserInfo için GetUserInfo() metodlarını kullanabilirsiniz.*/

FriendList1.Friends = _fbService.GetFriends();
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim5.png" rel="lightbox[54]"><img class="alignnone size-full wp-image-60" title="Resim5" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Resim5.png" alt="" width="396" height="332" /></a><br />
Developer Toolkit içindeki web araçları.</p>
<p><strong>Bilmekte Fayda Var</strong></p>
<ul>
<li>Ortaya çıkarsa sizi çok uğraştıracak ilginç bir bug mevcut. Kayıt esnasında eğer Callback URL, Site Nav URL gibi belirli sayfa adresleri verdiğiniz alanlarda büyük harf kullanırsanız (ör: http://siteniz.com/Default.aspx), Facebook nedeni belirsiz bir “Sayfa Bulunamadı” hatasıyla sizi karşılıyor. Harfleri küçültünce sorun düzeliyor.</li>
<li>Sayfanızda IFRAME kullanıyorsanız, IE 6 ile birlikte gelen bir güvenlik tedbiri nedeniyle session içinde tutulan bilgiler bu tarayıcılarda silinebilir ve uygulamanız hata verebilir. Bunun önüne geçmek için sayfanıza aşağıdaki kodu eklemeniz yeterli:</li>
</ul>
<ul>
<li>Uygulamanızın kayıt bilgilerinde yaptığınız değişikliklerin gerçekleşmesi biraz zaman alabiliyor, bu yüzden sabırlı olmalısınız.</li>
</ul>
<p>IE 6 Kullananlara:</p>
<pre class="brush: csharp; ">

protected override void OnPreRender(EventArgs e)

{

Response.AppendHeader(&quot;P3P&quot;, &quot;CP=\&quot;CAO PSA OUR\&quot;&quot;);

base.OnPreRender(e);

}
</pre>
<p><strong>Dünyaya Açılın!</strong></p>
<p>Visual Studio’nun geliştirme ortamı bizlere, hazır sınıf kütüphaneleri kullanarak çok kısa sürede uygulamalarımızı geliştirmemize imkan tanıyor. Bilgisayarımızda hazırladığımız uygulama istediğimiz seviyeye ulaştığında, artık onu bir sunucuya gönderebiliriz. Uygulamanın yayına geçebilmesi için “Developer” uygulaması üzerinden kayıt bilgilerine erişip, buradaki adresleri güncellemeliyiz. Gönderme işleminden sonra Facebook yöneticileri onaylarsa, uygulama galerisinde sizin projenizde gözükecektir.</p>
<p>Büyük yazılım fimalarının ve yatırımcılarının ilgisi devam ettikçe, Facebook uygulamalarının popülerliğini yitireceğinden endişe etmenize gerek yok. Ayrıca yakın zamanda  web tabanlı işletim sistemi geliştiren bir firmayı bünyesine katan, bunun yanında uygulamaları MySpace gibi yüksek kullanıcı kitlesine sahip diğer sitelerde de çalışabilen bir platform, uğraşlarınızı dünyaya tanıtmak konusunda eminim size yardımcı olacaktır.</p>
<p>Örnek canvas uygulaması indir: <a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Canvas-Uygulaması.zip">Canvas Uygulaması</a></p>
<p>Örnek profil uygulaması indir: <a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/Profil-Uygulaması.zip">Profil Uygulaması</a></p>
<p>p.s. Bu yazı<span style="color: #ff0000;"> Mart 2008</span> tarihli PC Magazine dergisi makalemden derlenmiştir. Geçen zamanda Facebook uygulama yapısına bazı eklentiler yapıldı ve yazıda kullandığım bazı araçların da yeni versiyonları çıktı. Kendi uygulamanızı hazırlarken bunlara dikkat ederseniz sevinirim :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-kullanarak-facebook-uygulamasi-gelistirmek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET AJAX ile dinamik RSS okuyucu hazirlamak</title>
		<link>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-ile-dinamik-rss-okuyucu-hazirlamak/</link>
		<comments>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-ile-dinamik-rss-okuyucu-hazirlamak/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 00:23:05 +0000</pubDate>
		<dc:creator>yigit</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[TR]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[pc magazine]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[rss reader]]></category>

		<guid isPermaLink="false">http://blog.yigitkiran.net/?p=15</guid>
		<description><![CDATA[Web 2.0 ile birlikte artık her yerde karşımıza çıkan RSS veri akışlarını okumaya yarayan bir web uygulaması hazırlayacağız. RSS okuyucular temel olarak, internetteki bir veri kaynağının ürettiği XML formatındaki yayın akışlarını çekip, bunları kendi arayüzünde kullanıcıya aktarırlar. Günümüzde birçok haber sitesi, sözlük, forum ve blog gibi kullanıcıların içeriği oluşturduğu sayfalar yayın akışlarını RSS kullanarak XML formatında izlenebilmesine imkan sağlıyorlar. Web portalları, Facebook ve MSN gibi yoğun olarak kullandığımız sitelerde de RSS okuyucuları yardımıyla, diğer sitelerde güncellenen konuları özet olarak görebiliyoruz.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/main_picd.png" rel="lightbox[15]"><img class="size-medium wp-image-31 aligncenter" title="main_picd" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/main_picd-300x272.png" alt="" width="300" height="272" /></a></p>
<p>Bu sefer Web 2.0 ile birlikte artık her yerde karşımıza çıkan RSS veri akışlarını okumaya yarayan bir web uygulaması hazırlayacağız. RSS okuyucular temel olarak, internetteki bir veri kaynağının ürettiği XML formatındaki yayın akışlarını çekip, bunları kendi arayüzünde kullanıcıya aktarırlar. Günümüzde birçok haber sitesi, sözlük, forum ve blog gibi kullanıcıların içeriği oluşturduğu sayfalar yayın akışlarını RSS kullanarak XML formatında izlenebilmesine imkan sağlıyorlar. Web portalları, Facebook ve MSN gibi yoğun olarak kullandığımız sitelerde de RSS okuyucuları yardımıyla, diğer sitelerde güncellenen konuları özet olarak görebiliyoruz.</p>
<p><span id="more-15"></span></p>
<p>Uygulamaya geçmeden önce AJAX kullanmamızın nedenlerinden bahsedelim. Aslında ASP.NET ile geliştirilen bir RSS okuyucusu da işimizi görebilirdi.  Fakat bu yayın akışlarının bilgileri sürekli güncellendiği için (ör. Bir haber sitesinin güncel haberlerinin özet akışları.) sayfamızdaki uygulamanın sürekli yenilenmesi gerekmekte. AJAX öncesi sistemleri hatırlarsak, uygulamamızda bir yenilenme söz konusu olduğunda sayfamızda önce bir tık sesi, ardından beyaz bir ekran ve bütün sayfanın tekrardan oluştuğu, kullanıcıların dikkatini dağıtan bir yenilenme (postback) işlemi gerçekleşmekteydi. Biz bu işlemleri AJAX içerisinde bir zamanlayıcı (timer) kullanarak otomatik olarak gerçekleştireceğiz, ve kullanıcı sayfada gezerken yayın akışlarındaki güncellemeleri bir masaüstü uygulamasındaki gibi dinamik olarak görebilecek. Son olarak güncel bir Visual Studio sürümü kurulu bilgisayarınıza AJAX yeteneklerini kazandırabilmeniz için <a href="http://ajax.asp.net/">http://ajax.asp.net</a> adresinden Microsoft’un “AJAX Extensions” eklenti paketini indirip kurmanız gerektiğini belirtelim. Mevcut “AJAX Extensions 3.5” sürümü VS 2005 ve VS 2008 üzerinde çalışabilmekte.</p>
<p>Kurulum işlemlerini bitirip uygulamaya başlamaya hazırsanız biraz RSS kaynaklarının formatından bahsedelim. Daha önceden yayın akışlarının XML formatında veriler ilettiğini söylemiştik. Bu veriler temel olarak sayfadaki yayınların başlığını, konuyla ilgili resimleri ve konunun ilişkili linkini, yayımlanma tarihini ve kısa bir özetini içerebilirler. Özetleri aldığımız kaynaktaki xml dokümanda bu içerikler bazı standart etiketler (tag) ile (bkz. Rss etiketleri tablosu) sabittir ve RSS okuyucuları bu etiketleri kullanarak içeriği yorumlar. Hazırlayacağımız bu RSS okuyucuyu sayfanıza ekleyerek, kullanıcılarınız sayfanızla ilgili içeriğe sahip sitelerdeki gelişmelerden anında haberdar edebilir, veya sayfanızda oluşturduğunuz içeriği bu uygulama ile başka sitelerde yayınlayabilirsiniz.</p>
<p style="text-align: center;"><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/rss_etiketleri.png" rel="lightbox[15]"><img class="size-full wp-image-16 aligncenter" title="rss_etiketleri" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/rss_etiketleri.png" alt="" width="430" height="374" /></a> Sık kullanılan rss etiketleri ve hiyerarşisi bu şekilde.</p>
<p><strong>SAYFA TASARIMI</strong></p>
<p>Uygulamamızı bir tablo içerisinde, daha önceden verilen bir RSS kaynağını okuyarak otomatik olarak içeriğini güncelleyebilecek şekilde planladık. Böyle bir uygulamanın ihtiyacı olan her şey .NET Framework ve AJAX Extensions içerisinde mevcut olduğundan, ayrıca Visual Studio ile gereken modülleri fareyle sayfamıza sürükleyerek kullanabildiğimizden çok yorulmayacağımızı şimdiden söylemeliyim. İlk olarak yapmamız gereken, Visual Studio ile yeni bir “Web Site Project” oluşturmak, ve eğer VS 2005 sürümünü kullanıyorsak seçenekler içerisinden “Ajax Enabled Web Site” seçeneğini seçtiğimizden emin olmak. Karşımıza default.aspx sayfasının dizayn ekranı gelince, uygulamada kullanacağımız modülleri sayfamıza taşımaya başlayabiliriz. Eğer VS 2008 versiyonunu kullanıyorsak, Tools içindeki Ajax Extensions modüllerinden ScriptManager’i sayfamıza eklememiz gerekiyor.  Yine Ajax Extensions içerisinden UpdatePanel, ve içine bir adet Timer objesini sayfaya eklerseniz, tasarım aşamasına geçebilirsiniz. RSS okuyucusu tasarımının en önemli tarafı, eklediğiniz öğeleri UpdatePanel içerisine taşıdığınızdan emin olmalısınız. Ben bir tane Table (2&#215;1 formatında) ve iki adet Label ekleyerek sade bir tasarım yaptım, siz kendi sitenize uygun bir biçimde burayı çeşitlendirebilirsiniz. Bileşenlerin yer aldığı formun kodlarını aşağıda görebilirsiniz.</p>
<pre class="brush: xml; ">

&lt;asp:ScriptManager ID=&quot;ScriptManager1&quot; runat=&quot;server&quot; /&gt;

&lt;div&gt;

&lt;asp:UpdatePanel ID=&quot;UpdatePanel1&quot; runat=&quot;server&quot;&gt;

&lt;ContentTemplate&gt;

&lt;asp:Timer ID=&quot;Timer1&quot; runat=&quot;server&quot; OnTick=&quot;Timer1_Tick&quot; Interval=&quot;60000&quot;&gt;

&lt;/asp:Timer&gt;

&lt;asp:Table ID=&quot;Table1&quot; runat=&quot;server&quot; BorderColor=&quot;Navy&quot; BorderStyle=&quot;Dashed&quot; BorderWidth=&quot;3px&quot; CellPadding=&quot;0&quot; CellSpacing=&quot;0&quot;  ForeColor=&quot;White&quot;&gt;

&lt;asp:TableRow runat=&quot;server&quot; BackColor=&quot;SlateGray&quot; Font-Names=&quot;verdana&quot; Font-Size=&quot;10pt&quot; Width=&quot;400px&quot;&gt;

&lt;asp:TableCell runat=&quot;server&quot; Width=&quot;300px&quot;&gt;

&lt;asp:Label ID=&quot;Label1&quot; runat=&quot;server&quot; Font-Bold=&quot;True&quot; Text=&quot;PC Magazin Forumlarında Son 10 başlık&quot;&gt;&lt;/asp:Label&gt;&lt;/asp:TableCell&gt;

&lt;/asp:TableRow&gt;

&lt;asp:TableRow runat=&quot;server&quot; BackColor=&quot;WhiteSmoke&quot; Font-Names=&quot;verdana&quot; Font-Size=&quot;10pt&quot;

ForeColor=&quot;Black&quot; BorderWidth=&quot;0px&quot; HorizontalAlign=&quot;Left&quot; VerticalAlign=&quot;Top&quot; Width=&quot;400px&quot;&gt;

&lt;asp:TableCell runat=&quot;server&quot; BackColor=&quot;WhiteSmoke&quot;&gt;

&lt;asp:Label ID=&quot;Label2&quot; runat=&quot;server&quot;&gt;&lt;/asp:Label&gt;&lt;/div&gt;

&lt;/asp:TableCell&gt;

&lt;/asp:TableRow&gt;

&lt;/asp:Table&gt;

&lt;/ContentTemplate&gt;

&lt;/asp:UpdatePanel&gt;

&lt;/div&gt;
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/sayfa_son_hali.png" rel="lightbox[15]"><img class="alignnone size-medium wp-image-17" title="sayfa_son_hali" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/sayfa_son_hali-300x227.png" alt="" width="300" height="227" /></a><br />
RSS okuyucumuz PC Magazine forumlarını yakından takip ediyor..</p>
<p><strong>RSS OKUYUCU HAZIRLAMAK</strong></p>
<p>Yayın akışı kaynağının verileri XML olarak gönderdiğinden bahsetmiştik. Bu nedenle okuyucumuz aslında RSS standart etiketlerini kullanan bir XML okuyucudan ibaret. Okunan verileri bir StringBuilder ile birleştirerek, dizaynımızda eklediğimiz Label’ın text özelliğine eşitlememiz gerekiyor. Programlamaya başlamadan önce System.Xml, ve System.Text bileşenlerini sınıfımıza eklemeliyiz. Yine dizayn esnasında eklediğimiz Timer’ın zaman aralığını default 60000ms değerinde bırakırsanız, okuyucu 60 saniyede bir asenkron olarak içindeki verileri güncelleyecektir.  Örnek amaçlı hazırladığımız uygulamada, dergimizin forumlarındaki son 10 konu başlığını ve özetini görüntülensin istiyoruz. Ayrıca konu başlığına tıklayınca ilgili sayfaya gitmesi için sayfanın linkini de eklemeliyiz. Bu durumda RSS 2.0 etiketlerinden başlık (title), link ve açıklama (description)  etiketlerini kullanmamız yeterli olacaktır. Bütün xml okuma işlemlerini toplayacağımız string tipinde değişken döndüren bir metod ile gereken bilgileri tablomuzun içindeki Label objesine iletebiliriz. Framework içerisindeki XmlTextReader sınıfından bir objeye PC Magazine Forumlarının RSS kaynağının adresini verip, kaynaktan dönmesini beklediğimiz xml sayfası içerisinde istediğimiz etiketleri arayacağız. Bu etiketlere sahip elemanları (varsa eğer) bir string değişkeninde kaydedip sonucu döndüreceğiz. Dikkat edilmesi gereken nokta, istediğimiz etiketlere sahip elemanların, okuyucuya verdiğimiz xml kaynağı içerisinde olmaması; hatta verdiğimiz kaynak adresinin zaman içerisinde yanıt vermemesi veya ulaşılamaması durumunda sayfamızın yorumlanamayacağı ve hata vereceğidir. Böyle bir durumda olası hataların önüne geçebilmek için, xml okuma işlemini bir try-catch bloğu içerisinde yapmamız doğru olacaktır. Veri kaynağına bağlanmaya ve verileri okumaya yarayan satırları bir try-catch bloğu içinde yazarsak, bu işlemlerde herhangi bir hatayla karşılaşırsak bile bunu “Yeni bir başlık okunamadı?” gibi bir hata mesajıyla kullanıcılara çaktırmamak mümkün J.  Yayın akışını okumaya yarayan RssOku metodumuzun içeriği aşağıda görülebilir.</p>
<pre class="brush: csharp; ">

private string RssOku()

{

//Okunacak RSS kaynağının adresi (ör: dergimizin forumları).

string url =http://www.pcmag.com.tr/forum/index.php?type=rss;action=.xml&quot;;

//Kullandığımız XML etiketleri için değişkenler.

string baslik = null;

string link = null;

string aciklama = null;

//Kaç tane özet göstereceğimizi tutan değişken.

int ozetSayisi = 10;

//RSS kaynağını okuyacak xml reader nesnesi.

XmlTextReader okuyucu = null;

//Okunan bilgileri String Builder ile birleştireceğiz.

StringBuilder okunan = new StringBuilder();

okunan.Append(&quot;&lt;ul&gt;&quot;);//(&quot;&lt;ul&gt;&quot;);

//Kaynağa ulaşırken veya okuma esnasında oluşabilecek hatalara karşı,

//işlemlerimizi try-catch bloğu içerisinde yapıyoruz.

try

{

//Kaynak adresini okuyucu&#039;ya verince hazırız.

okuyucu = new XmlTextReader(url);

okuyucu.MoveToContent();

//Kaynaktan okumaya başlıyoruz.

while (okuyucu.Read())

{

//Döküman içinde bir akış bulursak, bilgilerini toplamaya başlıyoruz.

if (okuyucu.Name == &quot;item&quot; &amp;&amp; okuyucu.NodeType == XmlNodeType.Element)

{

//İstediğimiz sayıda başlık okuduysak devam etmeye gerek yok.

if (ozetSayisi-- == 0)

break;

//Eğer istediğimiz kadar okuyamadıysak devam edelim.

okunan.Append(&quot; » &quot;);

}

//Akışın başlık bilgisini ekle.

if (okuyucu.Name == &quot;title&quot;)

baslik = okuyucu.ReadString();

//Akışın linkini ekle.

if (okuyucu.Name == &quot;link&quot;)

link = okuyucu.ReadString();

//Akışın açıklamasını ekle.

if (okuyucu.Name == &quot;description&quot;)

aciklama = okuyucu.ReadString();

//Akış bitiyorsa bütün bilgileri string değişkenine kaydet.

if (okuyucu.Name == &quot;item&quot; &amp;&amp; okuyucu.NodeType == XmlNodeType.EndElement)

{

//bütün bilgiler değişkene html biçiminde eklenecek.

okunan.Append(&quot;&lt;a href=&#039;&quot;);

okunan.Append(link);

okunan.Append(&quot;&#039; target=\&quot;_blank\&quot;&gt;&quot;);

okunan.Append(baslik);

okunan.Append(&quot;&lt;/a&gt;&quot;);

okunan.Append(&quot;&lt;br /&gt;&quot;);

okunan.Append(aciklama);

okunan.Append(&quot;&lt;br /&gt;&quot;);

}

}

}

//Eğer okuma sırasında bir hata olursa buradaki mesaj döndürülecek.

catch (Exception e)

{

return &quot;Yeni bir başlık yok.&quot;;

}

//Sunucumuzu yormamak adına Xml okuyucumuzu kapatmalıyız.

okuyucu.Close();

//Yayın akışlarından kaydedilen bilgileri döndür.

return okunan.ToString();

}
</pre>
<p><a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/default_aspx_tasarim.png" rel="lightbox[15]"><img class="alignnone size-medium wp-image-36" title="default_aspx_tasarim" src="http://yigitkiran.net/wp/wp-content/uploads/2010/02/default_aspx_tasarim-300x165.png" alt="" width="300" height="165" /></a><br />
Gereken araçları toolbardan eklediğimizde sayfanın görünümü</p>
<p><strong>SON DÜZENLEMELER</strong></p>
<p>Yayın akışlarını okuyup string tipinde bir değişken döndüren metodumuz hazır olduğuna göre işin büyük bir bölümünü bitirdik sayılır. Şimdi bu metodu sayfamıza entegre etmek kalıyor. ASP.NET ile ilgilenenler veya önceki sayılarımızı takip edenlerin yakından tanıdığı ünlü Page_Load olayını (event) kullanarak tablomuzdaki Label objesinin text değerine (Bizim dizaynımızda objenin ismi “Label2”.)  RssOku() metodumuzun sonucunu atayarak, sayfamız açıldığında uygulamamızın yüklenmesini sağlamış olacağız:</p>
<pre class="brush: csharp; ">

protected void Page_Load(object sender, EventArgs e)

{

Label2.Text = RssOku();

}
</pre>
<p>Tebrikler, artık çalışan bir RSS okuyucumuz var. Fakat en başta amacımız, sadece sayfa açıldığında açılan bir okuyucu değildi. Uygulamamızı arka planda sessizce içeriğini güncelleyecek bir şekilde dizayn etmiştik. Bu aşamada önceden UpdatePanel içerisine yerleştirdiğimiz Timer devreye giriyor. Hatırlarsanız, bu Timer default 60 saniyelik bir aralığa sahipti. O zaman dizayn ekranındaki Timer kontrolünün üzerine çift tıklayıp, Visual Studio’nun Timer1_Tick  olayını yaratmasına yardımcı olalım ve Page_Load olayında yaptığımız işlemin aynısı burada tekrarlayalım ki her Tick olayında RSS okuyucumuzun içeriği otomatik olarak güncellensin:</p>
<pre class="brush: csharp; ">

protected void Timer1_Tick(object sender, EventArgs e)

{

Label2.Text = RssOku();

}
</pre>
<p>Şimdi amacımıza gerçekten ulaştık, uygulamamız kendini asenkron bir biçimde yenileyebilecek. Artık birçok web 2.0 sayfasındaki içeriği web sayfanızda canlı bir şekilde yayınlayabilir, sayfanızı ziyaret edenlerin bilgiye daha kolay ulaşmalarına yardımcı olabilirsiniz. Konu RSS olunca, bu uygulamayla birçok kaynağı takip etme olanağı bulabilir, anlık veri değişimleri gerçekleşen (borsa verileri gibi) içerikleri web sayfanıza entegre edebilirsiniz. Kullandığınız kaynak destekliyorsa, farklı RSS etiketleri kullanarak (Resim, yorum, oy, vb.) yeni bileşenlerini de bu uygulamaya ekleyebilir, RSS okuyucunuzu daha interaktif hale getirebilirsiniz. Böyle bir durumda yapmanız gereken tek şey, RssOku metoduna yeni bir değişken atamak ve xml veriyi okurken bu değişkenin rss etiketini kayda almak olacak (ör. resim eklemek için “image” etiketini kullanmak).</p>
<p>Tekrar hatırlatmak gerekir ki, böyle bir uygulamayı “AJAX Extensions” kütüphanesini kullanmadan, javascript kodlarıyla yapmaya kalksak açıklamasını bu sayfalara sığdırmamız mümkün olmayacaktı. Visual Studio’nun imkanları, birçok şeyi arka planda otomatik gerçekleştirdiği için bu yeni teknolojiyi kısa zamanda ve en az kod satırıyla kullanmamıza olanak sağladı.</p>
<p>Örnek Uygulamanın Kodları: <a href="http://yigitkiran.net/wp/wp-content/uploads/2010/02/AJAXEnabledWebSite2.zip">AJAXEnabledWebSite2</a></p>
<p>Örnek uygulama: <a href="http://www.yigitkiran.net/rssReader/" target="_blank">http://www.yigitkiran.net/rssReader/</a></p>
<p>p.s.: Bu makale subat 2008 tarihli PC Magazine dergisinde yayınlanan makalemi kesip biçerek derlediğim ocak 2008 tarihli bir yazıdır ki kullanılan IDE ve kütüphaneler güncel değildir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yigitkiran.net/blog/2010/02/aspnet-ajax-ile-dinamik-rss-okuyucu-hazirlamak/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

