<?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>asp.net, jquery ve diğer web teknolojileri üzerine &#187; Asp.Net</title>
	<atom:link href="http://www.apostylee.com/category/asp-net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.apostylee.com</link>
	<description>asp.net, jquery ve diğer web teknolojileri üzerine, biraz da kişisel.</description>
	<lastBuildDate>Mon, 10 Oct 2011 11:49:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Twitter #hashtag, @kullanici ve url biçimlendirme</title>
		<link>http://www.apostylee.com/twitter-hashtag-kullanici-ve-url-bicimlendirme/</link>
		<comments>http://www.apostylee.com/twitter-hashtag-kullanici-ve-url-bicimlendirme/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 07:23:47 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[friendfeed]]></category>
		<category><![CDATA[htmlhelper]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1796</guid>
		<description><![CDATA[Twitter, Friendfeed gibi sosyal ağlarda bir şeyi etikletlemek istediğimizde #(diyez) işaretiyle başlayarak etiketimizi yazabiliyoruz, buna hashtag (#etiketimiz) deniyor. Twitter&#8217; da @ işaretiyle başlayıp herhangi bir kullanıcının adını yazdığımızda (@apostylee) o kullanıcıya bir uyarı gidiyor ve ekranda biz bu girdiyi kullanıcının profiline giden bir link olarak görüyoruz. Konuyla ilgili geçenlerde şöyle bir şey paylaşmıştım. Bu iki [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Twitter, Friendfeed gibi sosyal ağlarda bir şeyi etikletlemek istediğimizde <strong>#</strong>(diyez) işaretiyle başlayarak etiketimizi yazabiliyoruz, buna hashtag (<strong>#etiketimiz</strong>) deniyor. Twitter&#8217; da <strong>@</strong> işaretiyle başlayıp herhangi bir kullanıcının adını yazdığımızda (<strong><a href="http://twitter.com/#!/apostylee" target="_blank">@apostylee</a></strong>) o kullanıcıya bir uyarı gidiyor ve ekranda biz bu girdiyi kullanıcının profiline giden bir link olarak görüyoruz. Konuyla ilgili geçenlerde <strong><a href="http://www.apostylee.com/twitter-style-search-textbox/" target="_blank">şöyle bir şey paylaşmıştım</a></strong>. Bu iki özelliğe ek olarak <strong>http://</strong> yada <strong>www.</strong> ile başlayan bir girdi yaptığımızda otomatik olarak linke dönüştürülüyor.<a href="http://www.apostylee.com/wp-content/uploads/2011/08/twitterstyle.png"><img class="size-full wp-image-1807 aligncenter" title="twitterstyle" src="http://www.apostylee.com/wp-content/uploads/2011/08/twitterstyle.png" alt="" width="786" height="120" /></a><span id="more-1796"></span> Bu olay yaptığım bir projede lazım olmuştu, hazır yapılmışı varmı diye ararken <strong><a href="http://jesal.us/2009/05/how-to-parse-twitter-usernames-hashtags-and-urls-in-c-30/" target="_blank">burada</a></strong> ki kodları buldum. İş sadece biçimlendirmeyle bitmiyor, eğer Twitter&#8217; da ki gibi ilgili kullanıcıya bir bilgi vermemiz gerekirse o kullanıcı adına sahip olmamız gerekiyor, bu işi ufak bir <strong><a href="http://en.wikipedia.org/wiki/Regular_expression" target="_blank">regex</a></strong> kullanarak hallediyoruz. Örneklere bakınca demek istediğimi daha iyi anlayacaksınız. Önce girdiyi biçimlendiren kodlarımız;</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;

namespace WebApplication2
{
    public static class HtmlParser
    {
        public static List hashTagList(string s) {
            Regex tags = new Regex(@&quot;(?:(?            List l = new List();
            foreach (Match item in tags.Matches(s))
            {
                l.Add(item.Groups[1].ToString());
            }
            return l;
        }

        public static List userNameList(string s)
        {
            Regex tags = new Regex(@&quot;(?:(?            List l = new List();
            foreach (Match item in tags.Matches(s))
            {
                l.Add(item.Groups[1].ToString());
            }
            return l;
        }

        public static string Link(this string s, string url)
        {
            return string.Format(&quot;&lt;a href=&quot;\&amp;quot;{0}\&amp;quot;&quot; target=&quot;\&amp;quot;_blank\&amp;quot;&quot;&gt;{1}&lt;/a&gt;&quot;, url, s);
        }
        public static string ParseURL(this string s)
        {
            return Regex.Replace(s, @&quot;(http(s)?://)?([\w-]+\.)+[\w-]+(/\S\w[\w- ;,./?%&amp;=]\S*)?&quot;, new MatchEvaluator(HtmlParser.URL));
        }
        public static string ParseUsername(this string s)
        {
            return Regex.Replace(s, &quot;(@)((?:[A-Za-z0-9-_]*))&quot;, new MatchEvaluator(HtmlParser.Username));
        }
        public static string ParseHashtag(this string s)
        {
            return Regex.Replace(s, &quot;(#)((?:[A-Za-z0-9-_]*))&quot;, new MatchEvaluator(HtmlParser.Hashtag));
        }
        private static string Hashtag(Match m)
        {
            string x = m.ToString();
            string tag = x.Replace(&quot;#&quot;, &quot;&quot;);
            return x.Link(&quot;http://www.alanadi.com/tag/&quot; + tag);
        }
        private static string Username(Match m)
        {
            string x = m.ToString();
            string username = x.Replace(&quot;@&quot;, &quot;&quot;);
            return x.Link(&quot;http://www.alanadi.com/&quot; + username);
        }
        private static string URL(Match m)
        {
            string x = m.ToString();
            return x.Link(x);
        }
    }
}
</pre>
<p>Örnek kullanım ise şu şekilde;</p>
<pre class="brush: csharp; title: ; notranslate">
        protected void Page_Load(object sender, EventArgs e)
        {
            string strCumle = &quot;selam @apostylee @ferdinand @drogma, nasılsın bakalım ? #tag #tag2 http://www.apostylee.com www.alanadi.com&quot;;

            Response.Write(strCumle.ParseURL().ParseUsername().ParseHashtag()+&quot;&lt;/pre&gt;

&lt;hr /&gt;

&lt;pre&gt;
&quot;);

            Response.Write(HtmlParser.userNameList(strCumle).Count+&quot;&lt;/pre&gt;

&lt;hr /&gt;

&lt;pre&gt;
&quot;);

            foreach (var item in HtmlParser.userNameList(strCumle))
            {
                Response.Write(item+&quot;
&quot;);
            }
        }
</pre>
<p><strong>HtmlParser.userNameList()</strong> ve <strong>HtmlParser.hashTagList()</strong> methodları bize ilgili girdideki kullanıcı adlarının yada etiketlerin listesini döndürüyor. Yukarıda da bahsettiğim gibi eğer veritabanına yazmamız gereken bir durum varsa bu iki methodun bize döndürdüğü listeyi kullanıyoruz. Projenin çalışır halini <strong><a href="http://www.apostylee.com/wp-content/uploads/2011/08/WebApplication2.zip" target="_blank">buradan</a></strong> indirebilirsiniz. Umarım faydalı bir yazı olmuştur..</p>
<div class="shr-publisher-1796"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/twitter-hashtag-kullanici-ve-url-bicimlendirme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EntityFramework SqlMigrations ile Verileriniz Kaybolmasın</title>
		<link>http://www.apostylee.com/code-first-migrations-walkthrough-of-august-2011-ctp/</link>
		<comments>http://www.apostylee.com/code-first-migrations-walkthrough-of-august-2011-ctp/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 14:07:50 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[code-first]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[entity]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc3]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1747</guid>
		<description><![CDATA[Başlıktan bir şey anlamamış olabilirsiniz ama eğer Ado.Net Entity ile ilgiliyseniz bu yazı çok hoşunuza gidecek ;) 3-5 dakika önce Google Reader dan Code First Migrations: Walkthrough of August 2011 CTP başlığıyla gördüğüm yazıyı hemen sizlerle paylaşmak istedim. Bildiğiniz üzere eğer modelinizi code-first yaklaşımıyla oluşturmuşsanız ve projenizi çalıştırmışsanız veritabanı otomatik olarak oluşuyor ve sonrasında modelinizde [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Başlıktan bir şey anlamamış olabilirsiniz ama eğer Ado.Net Entity ile ilgiliyseniz bu yazı çok hoşunuza gidecek ;)</p>
<p>3-5 dakika önce Google Reader dan <a href="http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-walkthrough-of-august-2011-ctp.aspx" target="_blank">Code First Migrations: Walkthrough of August 2011 CTP</a> başlığıyla gördüğüm yazıyı hemen sizlerle paylaşmak istedim.<br />
<a href="http://www.apostylee.com/wp-content/uploads/2011/07/netlogo.png"><img class="size-medium wp-image-1750 aligncenter" title="netlogo" src="http://www.apostylee.com/wp-content/uploads/2011/07/netlogo-300x74.png" alt="" width="300" height="74" /></a><br />
Bildiğiniz üzere eğer modelinizi <a href="http://www.apostylee.com/tag/code-first/" target="_blank">code-first</a> yaklaşımıyla oluşturmuşsanız ve projenizi çalıştırmışsanız veritabanı otomatik olarak oluşuyor ve sonrasında modelinizde yaptığınız değişikliği veritabanına uygulamak için context inizin içine &#8220;System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges&lt;Test.Models.TestContext&gt;());&#8221; ifadesini ekleyerek modeldeki güncellemeyi veritabanımıza uyguluyorduk. Fakat bu yöntemde istenmeyen bir durum oluşuyor ve eğer veritabanında bilgi varsa bilgilerde gidiyordu çünkü bu kod veritabanını komple kaldırıp yeniden oluşturarak güncelleme işini yapıyordu. Artık bu can sıkıcı durumdan kurtuluyoruz !</p>
<p>Yapmamız gereken tek şey projemize &#8220;<strong>EntityFramework.SqlMigrations</strong>&#8221; <a href="http://www.apostylee.com/paket-yonetim-konsolu-package-manager-console/" target="_blank">paketini eklemek</a>. Sonrasında yeni bir alanı güncellemek için paket yönetici konsoluna &#8220;<strong>Update-Database</strong>&#8221; komutunuı yazıp çalıştırmamız yeterli oluyor. Eğer varolan bir alanın adını güncellemek istiyorsak &#8220;<strong>Update-Database -Renames:&#8221;kullanici.Email=&gt;<strong>kullanici</strong>.EmailAddress&#8221;</strong>&#8221; komutunu çalıştırmamız yeterli. SqlMigrations&#8217; un diğer özelliklerine <a href="http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-walkthrough-of-august-2011-ctp.aspx" target="_blank">buradan</a> bakabilirsiniz. Bu işlemler yapılırken veritabanı içindeki bilgi kaybolmuyor sadece ilgili değişiklikler yapılıyor.</p>
<p>Bu mekanızma sayesinde önemli bir açığın kapandığını düşünüyorum, yukarda da belirttiğim gibi can sıkıcı bir durumdu ve iki türlü iş ile uğraşıyorduk. Biraz alel acele yazmak zorunda kaldım fakat durum sanıyorum anlaşılmıştır :)</p>
<div class="shr-publisher-1747"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/code-first-migrations-walkthrough-of-august-2011-ctp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ADO.NET Entity&#8217; e Giriş eKitabı</title>
		<link>http://www.apostylee.com/ado-net-entity-ekitabi/</link>
		<comments>http://www.apostylee.com/ado-net-entity-ekitabi/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 21:29:52 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[code-first]]></category>
		<category><![CDATA[entity]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc3]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1713</guid>
		<description><![CDATA[ADO.Net Entity&#8217; e başlangıç yapmak için faydalı olacağına inandığım bir eKitap yazdım. Umarım konuya ilgi duyan arkadaşların işine yarayan bir kaynak olmuştur. Gelen istekler üzerine sürekli güncellemeye çalışacağım bu kitabı buradan indirebilirsiniz. Olumlu olumsuz görüşlerinizi belirtirseniz çok mutlu olurum ;)]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>ADO.Net Entity&#8217; e başlangıç yapmak için faydalı olacağına inandığım bir eKitap yazdım. Umarım konuya ilgi duyan arkadaşların işine yarayan bir kaynak olmuştur. Gelen istekler üzerine sürekli güncellemeye çalışacağım bu kitabı <span style="color: #ff0000;"><strong><a href="http://www.apostylee.com/wp-content/uploads/2011/07/AdoNet-Entity.pdf"><span style="color: #ff0000;">buradan</span></a></strong></span> indirebilirsiniz. Olumlu olumsuz görüşlerinizi belirtirseniz çok mutlu olurum ;)</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/07/ado.net-entity-kapak.jpg"><img class="alignnone size-full wp-image-1716" title="ado.net entity kapak" src="http://www.apostylee.com/wp-content/uploads/2011/07/ado.net-entity-kapak.jpg" alt="" width="586" height="477" /></a><a href="http://www.apostylee.com/wp-content/uploads/2011/07/ado.net-entity-içindekiler.jpg"><img class="alignnone size-large wp-image-1715" title="ado.net entity içindekiler" src="http://www.apostylee.com/wp-content/uploads/2011/07/ado.net-entity-içindekiler-e1310851297952.jpg" alt="" width="590" height="461" /></a></p>
<div class="shr-publisher-1713"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/ado-net-entity-ekitabi/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Profil sayfası kişiselleştirme ve ComplexType</title>
		<link>http://www.apostylee.com/profil-sayfasi-kisisellestirme-ve-complextype/</link>
		<comments>http://www.apostylee.com/profil-sayfasi-kisisellestirme-ve-complextype/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 09:40:58 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[alet]]></category>
		<category><![CDATA[code-first]]></category>
		<category><![CDATA[colorpicker]]></category>
		<category><![CDATA[complextype]]></category>
		<category><![CDATA[customize]]></category>
		<category><![CDATA[farbtastic]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mvc3]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1690</guid>
		<description><![CDATA[Başlık biraz karışık oldu sanırım, biraz açayım. Profil sayfası kişiselleştirme dediğim; Twitter, FriendFeed gibi sayfalarda arkaplan resmini, konumunu ve renkleri isteğimize göre düzenleyebiliyoruz, yani profilimizi kişiselleştirebiliyoruz. ComplexType ise ilk konudan bir hayli alakasız aynı zamanda ComplexType olayını anlamak için çok alakalı. En kaba tabirle; modelimizde ki belirli özellekleri kümelediğimiz ve kod yazarken bize çok büyük [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Başlık biraz karışık oldu sanırım, biraz açayım. Profil sayfası kişiselleştirme dediğim; Twitter, FriendFeed gibi sayfalarda arkaplan resmini, konumunu ve renkleri isteğimize göre düzenleyebiliyoruz, yani profilimizi kişiselleştirebiliyoruz. <strong>ComplexType</strong> ise ilk konudan bir hayli alakasız aynı zamanda ComplexType olayını anlamak için çok alakalı. En kaba tabirle; modelimizde ki belirli özellekleri kümelediğimiz ve kod yazarken bize çok büyük kolaylık sağlayan bir yaklaşım.</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/kisillestirme.jpg"><img class="size-large wp-image-1693 aligncenter" title="kisillestirme" src="http://www.apostylee.com/wp-content/uploads/2011/06/kisillestirme-600x429.jpg" alt="" width="600" height="429" /></a></p>
<p><span id="more-1690"></span></p>
<p>Öncelikle modelimizi oluşturalım ve <strong><a href="http://weblogs.asp.net/manavi/archive/2010/12/11/entity-association-mapping-with-code-first-part-1-one-to-one-associations.aspx" target="_blank">ComplexType nedir</a></strong> ona bir bakalım. Senaryo şu şekilde. Kullanıcılarımız sayfalarını istedikleri gibi kişiselleştirebiliyor. Bu sebepten dolayı ilgili bilgileri veritabanında tutmamız gerekiyor. Öte yandan kullanıcıya ait ana bilgileride veritabanında tuttuğumuzu düşünürsek karışıklık olmasın diye bu iki tabloyu birbirinden ayrı ve ilişkilendirilmiş bir şekilde tasarlamamız olası bir durum. ComplexType ile birlikte bu karmaşayı ortadan kaldırabiliyoruz. Tablonun içinde tüm alanlar bulunuyor fakat kod yazarken kümelediğimiz isim üzerinden ilgili alanlara ulaşabiliyoruz. Örneğin bu kullanıcının adres bilgileri de aynı tabloda olsaydı, oldukça karmaşık bir durum söz konusu olacaktı. Aşağıda ki modelde kullanici isimli sınıfın içine kisisel adında bir ComplexType tanımlıyoruz ve kod yazarken kullanici yazıp noktaya bastığımızda, kisisel adında bir özellik görüyoruz, bu özelliğin içinde ise kisisel sınıfı içindeki alanlara erişebiliyoruz. Bu durumda veritabanımız şu şekilde oluşuyor;</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/complexTypeDatabase.jpg"><img class="size-large wp-image-1694 aligncenter" title="complexTypeDatabase" src="http://www.apostylee.com/wp-content/uploads/2011/06/complexTypeDatabase-600x494.jpg" alt="" width="600" height="494" /></a></p>
<p>Gördüğünüz gibi <strong>kisisel_</strong> ön ekiyle birlikte alanlarımız oluşmuş oldu. Buradaki isimlendirmeyi <strong><a href="http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx" target="_blank">Fluent Api</a></strong> ile birlikte düzenlememiz de mümkün. Eğer adres bilgilerinide kümelediğimiz bir ComplexType ımız olsaydı aynı tablo içinde <strong>adres_</strong> ön ekiyle ve kullanıcı modelini kullanırken kullanici.adres.* şeklinde ilgili alanlara erişebilecektik, bu sayede kod yazarken adresle ilgili bilgilerin adresin altında, kişiselleştirme ile ilgili bilgilerin kisiselin altında olduğunu anlayacaktık ;) Konuyla ilgili uygulama yaparsanız çok daha iyi anlayacaksınız.</p>
<p>Projemizde kullanacağımız modelimiz aşağıdaki gibi olacak..</p>
<pre class="brush: csharp; title: ; notranslate">
    public class kullanici
    {
        public kullanici() {
            kisisel = new kisisel();
        }

        public int id { get; set; }
        public string kullaniciAdi { get; set; }
        public string eposta { get; set; }
        public string sifre { get; set; }
        public kisisel kisisel { get; set; }
    }

    public class kisisel
    {
        public string bgColor { get; set; }
        public string bgImage { get; set; }
        public string bgPosition { get; set; }
        public string bgStyle { get; set; }
    }
</pre>
<p>Modelimizi oluşturduktan sonra işin zevkli kısmına geçebiliriz. Modelimize ait kontrollerimizide oluşturduktan sorna, Edit.cshtml sayfasına girip ilgili düzenlemeleri yapıyoruz. Kişiselleştirme için arkaplan rengini düzenleyeceğimizden bir renk seçme paletine ihtiyacımız var, ben <strong><a href="http://acko.net/dev/farbtastic" target="_blank">farbtastic</a></strong> i kullandım. Mevcut Edit.cshtml sayfasına farbtastic in dosyalarını ekliyoruz ve şu şekilde değiştiriyoruz.</p>
<pre class="brush: xml; title: ; notranslate">
@model profilKisisellestirme.Models.kullanici

@{
    ViewBag.Title = &quot;Edit&quot;;
}

&lt;h2&gt;Edit&lt;/h2&gt;

&lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery.validate.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery.validate.unobtrusive.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;@Url.Content(&quot;~/Scripts/farbtastic.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;link href=&quot;@Url.Content(&quot;~/Content/farbtastic.css&quot;)&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;

 &lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
     $(document).ready(function () {
         var f = $.farbtastic('#picker');
         var p = $('#picker').hide();
         var selected;
         $('.colorwell')
          .focus(function () {
              if (selected) {
                  $(selected).removeClass('colorwell-selected');
              }
              f.linkTo(this);
              p.show();
              $(selected = this).addClass('colorwell-selected');
          });

         $(&quot;input[name=bgPosition]&quot;).change(function () {
             var s = $(this).attr(&quot;checked&quot;);
             var b = $(&quot;body&quot;);
             if (s) {
                 b.css({ backgroundAttachment: 'scroll', backgroundRepeat: 'repeat repeat' });
             }
             else {
                 b.css({ backgroundAttachment: 'fixed', backgroundRepeat: 'no-repeat no-repeat' });
             }
         });

     });
 &lt;/script&gt;

@using (Html.BeginForm(&quot;Edit&quot;,&quot;kullanici&quot;,FormMethod.Post, new { enctype = &quot;multipart/form-data&quot; }))
{
    string strColor = &quot;#5c87b2&quot;;

    if (!string.IsNullOrEmpty(Model.kisisel.bgColor))
    {
        strColor = Model.kisisel.bgColor;
    }

    string strPosition = &quot;&quot;;

    if (!string.IsNullOrEmpty(Model.kisisel.bgPosition))
    {
        if (Model.kisisel.bgPosition.Contains(&quot;scroll&quot;))
        {
            strPosition = &quot;checked&quot;;
        }
    }    

    @Html.ValidationSummary(true)
    &lt;fieldset&gt;
        &lt;legend&gt;kullanici&lt;/legend&gt;

        @Html.HiddenFor(model =&gt; model.id)

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.kullaniciAdi)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.kullaniciAdi)
            @Html.ValidationMessageFor(model =&gt; model.kullaniciAdi)
        &lt;/div&gt;

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.eposta)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.eposta)
            @Html.ValidationMessageFor(model =&gt; model.eposta)
        &lt;/div&gt;

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.sifre)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.sifre)
            @Html.ValidationMessageFor(model =&gt; model.sifre)
        &lt;/div&gt;
        &lt;hr /&gt;

        &lt;div style=&quot;width:500px&quot;&gt;

            &lt;div class=&quot;editor-label&quot;&gt;
                &lt;strong&gt;Kişiselleştirme&lt;/strong&gt;
            &lt;/div&gt;

            &lt;div class=&quot;editor-label&quot;&gt;Arka resmi&lt;/div&gt;
            &lt;div class=&quot;editor-field&quot;&gt;
                &lt;input type=&quot;file&quot; name=&quot;bgImageFile&quot;/&gt;

                @if (!string.IsNullOrEmpty(Model.kisisel.bgImage))
                {
                    &lt;br /&gt;
                    &lt;a href=&quot;?bgClear=true&quot;&gt;&lt;strong&gt;Arkaplanı kaldır&lt;/strong&gt;&lt;/a&gt;
                }

                &lt;input type=&quot;hidden&quot; name=&quot;bgImage&quot; value=&quot;@Model.kisisel.bgImage&quot; /&gt;

                &lt;p style=&quot;margin-top:10px;color:Gray&quot;&gt;
                    Yükleyeceğiniz fotoğraf en fazla &lt;strong&gt;750kb&lt;/strong&gt; ve uzantısı &lt;strong&gt;jpg, png&lt;/strong&gt; olabilir.
                &lt;/p&gt;
            &lt;/div&gt;

            &lt;div id=&quot;picker&quot; style=&quot;float: right;&quot;&gt;&lt;/div&gt;
            &lt;div class=&quot;editor-label&quot;&gt;Arka plan rengi&lt;/div&gt;
            &lt;div class=&quot;editor-field&quot;&gt;
                &lt;input type=&quot;text&quot; name=&quot;bgColor&quot; class=&quot;colorwell&quot; value=&quot;@strColor&quot; /&gt;
            &lt;/div&gt;

            &lt;div class=&quot;editor-label&quot;&gt;
            Arkaplan tekrar etsin &lt;input type=&quot;checkbox&quot; name=&quot;bgPosition&quot; @strPosition /&gt;
            &lt;/div&gt;

        &lt;/div&gt;

        &lt;p&gt;
            &lt;input type=&quot;submit&quot; value=&quot;Save&quot; /&gt;
        &lt;/p&gt;
    &lt;/fieldset&gt;
}

&lt;div&gt;
    @Html.ActionLink(&quot;Back to List&quot;, &quot;Index&quot;)
&lt;/div&gt;
</pre>
<p>Son olarakda <strong>_Layout.cshtml</strong> içindeki  tagını <strong>&lt;body style=&#8221;@Session["bgStyle"]&#8220;&gt;</strong> şeklinde değiştiriyoruz.</p>
<p>Mekanızmanın mantığından biraz bahsetmek istiyorum. Öncelikle anlık renk değişimi ve arkaplanın pozisyonunu nasıl ayarladığımızdan bahsedeyim. Aslında bahsedecek çok fazlada bir şey yok, jQuery ile ilgili değişikliklerin olduğu form elemanlarını yakalayıp ilgili değişiklikleri sayfaya uyguluyoruz. Renk değişimini uygulamak içinse farbtastic.js içine 247. satıra <strong>$(&#8220;body&#8221;).css(&#8220;backgroundColor&#8221;,fb.color); </strong> kodunu ekliyoruz, diğer kodlar şu şekilde;</p>
<pre class="brush: jscript; title: ; notranslate">
 $(document).ready(function () {
         var f = $.farbtastic('#picker');
         var p = $('#picker').hide();
         var selected;
         $('.colorwell')
          .focus(function () {
              if (selected) {
                  $(selected).removeClass('colorwell-selected');
              }
              f.linkTo(this);
              p.show();
              $(selected = this).addClass('colorwell-selected');
          });

         $(&amp;quot;input[name=bgPosition]&amp;quot;).change(function () {
             var s = $(this).attr(&amp;quot;checked&amp;quot;);
             var b = $(&amp;quot;body&amp;quot;);
             if (s) {
                 b.css({ backgroundAttachment: 'scroll', backgroundRepeat: 'repeat repeat' });
             }
             else {
                 b.css({ backgroundAttachment: 'fixed', backgroundRepeat: 'no-repeat no-repeat' });
             }
         });

     });
</pre>
<p>Geri kalan kısımda ise veritabanına bilgi ekliyoruz ve fotoğraf yüklüyoruz. Ben bu örnekte kullanıcının kişiselleştirilmiş style bilgisini Session da tuttum, kullanıcı sisteme giriş yaptığında bu bilgiyi güncellemek yeterli. Siz kendi yapınızda nasıl kullanmak istiyorsanız o şekilde kullanabilirsiniz. Projenin çalışır halini ve kodlarını incelediğinizde esasında olayın çok basit olduğunu fark edeceksiniz. Umarım faydalı bir yazı olmuştur :)</p>
<p><span style="color: #ff0000;"><strong>Uyarı: </strong><span style="color: #000000;">Bu mekanızma tamamen eğitsel amaçlıdır, kullanımdan doğacak güvenlik problemlerinden beni sorumlu tutmay</span></span></p>
<p>Projenin çalışır haline <strong><a href="http://95.0.146.135/profilKisisellestirme/kullanici/Edit/1" target="_blank">buradan</a></strong> bakabilir, <strong><a href="http://www.apostylee.com/wp-content/uploads/2011/06/profilKisisellestirme.zip" target="_blank">buradan</a></strong> indirebilirsiniz.</p>
<div class="shr-publisher-1690"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/profil-sayfasi-kisisellestirme-ve-complextype/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PagedList kullanarak verileri sayfalama</title>
		<link>http://www.apostylee.com/pagedlist-mvc-paging-data/</link>
		<comments>http://www.apostylee.com/pagedlist-mvc-paging-data/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 08:10:06 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[entity]]></category>
		<category><![CDATA[mvc3]]></category>
		<category><![CDATA[paging]]></category>
		<category><![CDATA[sayfalama]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1678</guid>
		<description><![CDATA[Verileri sayfalamak iyidir :D Giriş için cümle bulamıyorum resmen, neyse siz girdik sayın :) Sağa sola bulaşmadan Nuget Gallery den PagedList.Mvc paketini projemize ekliyoruz. Nasıl ekliyoruz sorusunun cevabını burada bulabilirsiniz. PagedList açık kaynak bir proje, github sayfasına buradan ulaşabilirsiniz. PagedList&#8217; in kullanımı oldukça basit. Örneğimize göz atalım; View katmanına verileri gönderdiğimiz Action kontrolümüzde sadece şu [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Verileri sayfalamak iyidir :D Giriş için cümle bulamıyorum resmen, neyse siz girdik sayın :)</p>
<p>Sağa sola bulaşmadan Nuget Gallery den <strong><a href="http://nuget.org/List/Packages/PagedList.Mvc" target="_blank">PagedList.Mvc</a></strong> paketini projemize ekliyoruz. Nasıl ekliyoruz sorusunun cevabını <strong><a href="http://www.apostylee.com/paket-yonetim-konsolu-package-manager-console/" target="_blank">burada</a></strong> bulabilirsiniz. <strong>PagedList</strong> açık kaynak bir proje, github sayfasına <strong><a href="https://github.com/TroyGoode/PagedList" target="_blank">buradan</a></strong> ulaşabilirsiniz.</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/pagedlist.jpg"><img class="size-large wp-image-1680 aligncenter" title="pagedlist" src="http://www.apostylee.com/wp-content/uploads/2011/06/pagedlist-600x484.jpg" alt="" width="600" height="484" /></a><br />
<span id="more-1678"></span></p>
<p>PagedList&#8217; in kullanımı oldukça basit. Örneğimize göz atalım;</p>
<pre class="brush: csharp; title: ; notranslate">
        public ViewResult Index(int? page)
        {
            int pageIndex = page ?? 0;
            var result = db.mesajs.OrderByDescending(x=&gt;x.id).ToPagedList(pageIndex, 2);
            return View(result);
        }
</pre>
<p>View katmanına verileri gönderdiğimiz Action kontrolümüzde sadece şu kontrolü yapıyoruz. Eğer sayfa numarası yoksa sayfa numarasını 0 (sıfır) a eşitliyoruz. Sonrasında <strong>ToPagedList</strong> içerisine olduğumuz sayfayı ve bir sayfada listelenecek kayıt sayısını belirtip view a gönderiyoruz. View&#8217; ımız yani kullanıcıların gördüğü kısımı ise aşağıda ki şekilde düzenliyoruz. Aşağıda tüm sayfalama şekillerini gerçekleştirdim, siz istediğinizi kullanabilirsiniz.</p>
<pre class="brush: xml; title: ; notranslate">
@model PagedList.IPagedList&lt;mvcPagedList.Models.mesaj&gt;
@using PagedList.Mvc;
@using PagedList;

@{
    ViewBag.Title = &quot;Index&quot;;
}

&lt;style type=&quot;text/css&quot;&gt;
    h3{margin-bottom:5px}
    .PagedList-pager{}
    .PagedList-pager ul{list-style:none;margin:0;padding:0}
    .PagedList-pager ul li{margin:0;padding:0;float:left;margin-right:10px}
    .t{clear:both}
&lt;/style&gt;

&lt;h2&gt;Kayıtlar&lt;/h2&gt;

&lt;table&gt;
    &lt;tr&gt;
        &lt;th&gt;
            baslik
        &lt;/th&gt;
        &lt;th&gt;
            icerik
        &lt;/th&gt;
    &lt;/tr&gt;

@foreach (var item in Model)
{
    &lt;tr&gt;
        &lt;td&gt;
            @Html.DisplayFor(modelItem =&gt; item.baslik)
        &lt;/td&gt;
        &lt;td&gt;
            @Html.DisplayFor(modelItem =&gt; item.icerik)
        &lt;/td&gt;
    &lt;/tr&gt;
}

&lt;/table&gt;

&lt;hr /&gt;

&lt;h3&gt;Varsayılan sayfalama&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }))
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Önceki, Sonraki&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }), PagedListRenderOptions.Minimal)
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Önceki, Sonraki ve hangi sayfadasınız&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }), PagedListRenderOptions.MinimalWithPageCountText)
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Önceki, Sonraki ve hangi sayfadasınız. Toplam kayıt sayısı&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }), PagedListRenderOptions.MinimalWithItemCountText)
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Sayfa numaraları&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }), PagedListRenderOptions.PageNumbersOnly)
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Önceki, sonraki ve sayfa numaraları&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page + 1 }), PagedListRenderOptions.OnlyShowFivePagesAtATime)
&lt;div class=&quot;t&quot;&gt;&lt;/div&gt;

&lt;h3&gt;Kişiselleştirilmiş sayfalama&lt;/h3&gt;
@Html.PagedListPager(Model, page =&gt; Url.Action(&quot;Index&quot;, new { page = page }), new PagedListRenderOptions { LinkToFirstPageFormat = &quot;&lt;&lt; İlk&quot;, LinkToPreviousPageFormat = &quot;&lt; Önceki&quot;, LinkToNextPageFormat = &quot;Sonraki &gt;&quot;, LinkToLastPageFormat = &quot;Son &gt;&gt;&quot; })
</pre>
<p>Bu sayfalama yöntemi webForm&#8217; daki GridView ve benzeri diğeri kontroller içerisindeki veriyi sayfalamaktan çok daha performanslı. Sebebi ise şu, bu kontrollerin bize sunduğu sayfalama yöntemlerinde, ilk önce veritabanındaki tüm kayıtlar kontrolün içine doldurulup sonra sayfalanıyor. Yani 10000 satırlık bir verimiz varsa önce tüm veri çekileceğinden, ciddi bir performans kaybı oluşacaktır. Bu yöntemde sayfalama işlemini Sql Server Profiler ile gözlemlediğimizde, sadece istediğimiz kayıtların geldiğini gözlemye biliyoruz.</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/kisim1.png"><img class="size-large wp-image-1683 aligncenter" title="kisim1" src="http://www.apostylee.com/wp-content/uploads/2011/06/kisim1-600x375.png" alt="" width="600" height="375" /></a></p>
<p>Yukarıda ki durum sayfamızın ilk yüklendiğinde neler olduğunu gösteriyor. 1. kısım olarak işaretli yerde veritabanında ki toplam kayıt sayısı alınıyor, 2. kısımda 0 dan büyük 2 kayıt isteniyor, neden 2 kayıt çünkü biz <strong>ToPagedList</strong> içerisine gönderdiğimiz parametrede 1 sayfada 2 kayıt olmasını istemiştik ;) Neden 0 çünkü eğer sayfa numarası yoksa 0 a eşitlemiştik ;) Bu olay mysql de limit fonksiyonu ile yapılabiliyor. Limit olayını <strong>Linq</strong> de ki <strong>Take() Skip()</strong> fonksiyonlarını kullanarak yapabiliyoruz. PagedList&#8217; in temelinide bu ikili oluşturuyor ;)</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/kisim2.png"><img class="size-large wp-image-1684 aligncenter" title="kisim2" src="http://www.apostylee.com/wp-content/uploads/2011/06/kisim2-600x375.png" alt="" width="600" height="375" /></a><br />
İlk sayfaya geçtiğimizde yukarıdaki durumu gözlemliyoruz. Değişen tek şey 0 dan büyük 2 kayıt yerine bu sefer 2 den büyük 2 kayıtın istenmesi. Diğer sayfalara geçtğimizde de 2&#8242; nin katları şeklinde arttığını görüyoruz, yani her seferinde 2 kaydı bize çağırıyor ;) Anlatacaklarım bu kadar, umarım faydalı olmuştur.</p>
<p>Projenin çalışır halini <strong><a href="http://95.0.146.135/pagedlist/mesaj" target="_blank">şuradan</a></strong> görebilirsiniz, <strong><a href="http://www.apostylee.com/wp-content/uploads/2011/06/mvcPagedList.zip" target="_blank">buradan</a></strong> indirebilirsiniz.</p>
<div class="shr-publisher-1678"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/pagedlist-mvc-paging-data/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Ajax ile daha fazla kayıt göster olayı (Load More Data)</title>
		<link>http://www.apostylee.com/ajax-daha-fazla-kayit-goster-olayi-load-more-data/</link>
		<comments>http://www.apostylee.com/ajax-daha-fazla-kayit-goster-olayi-load-more-data/#comments</comments>
		<pubDate>Mon, 27 Jun 2011 11:52:34 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code-first]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[load more data]]></category>
		<category><![CDATA[mvc3]]></category>
		<category><![CDATA[sayfalama]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1663</guid>
		<description><![CDATA[Yine kullanımını ilk olarak Facebook ve Twitter&#8217; dan gördüğümüz bu olayın temel mantığını bildiğimiz sayfalama oluşturuyor. Neden bu şekilde bir sayfalama kullanmak gerekiyor isterseniz bunlara bir bakalım. Sayfa komple yenilenmeyeceğinden daha işlevsel. Örneğin; kullanıcı video izlerken altında ki yorumları sayfa sayfa dolaşmak isterse, video yarıda kesilmeyecektir. Sayfanın sadece ilgili yerini, ilgili kayıtlar kadar güncelleyeceğimizden daha [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Yine kullanımını ilk olarak Facebook ve Twitter&#8217; dan gördüğümüz bu olayın temel mantığını bildiğimiz sayfalama oluşturuyor. Neden bu şekilde bir sayfalama kullanmak gerekiyor isterseniz bunlara bir bakalım.</p>
<ol>
<li>Sayfa komple yenilenmeyeceğinden daha işlevsel. Örneğin; kullanıcı video izlerken altında ki yorumları sayfa sayfa dolaşmak isterse, video yarıda kesilmeyecektir.</li>
<li>Sayfanın sadece ilgili yerini, ilgili kayıtlar kadar güncelleyeceğimizden daha performanslı. Bu performans sunucu tarafında; daha az sistem kaynağı tüketimi, kullanıcı tarafında ise; sayfanın yüklenme süresi olarak gözlenebilir. Özetlersek sunucudan yapılan isteği minimize etmiş oluyoruz.</li>
</ol>
<p>Çektiğim videoların birinde dile getirdiğim bir konu vardı, yukarıda ki maddeleri görünce yazılı olarak da eklemek istedim. Anlık çok fazla kullanıcıya, çok fazla isteğe cevap verme durumunda olan siteler ajaxı bizim kara kaşımıza yada şekilli olsun afilli olsun diye kullanmıyor. Örneğin Facebook her işlemde sayfayı yeniden yüklemeye kalkarsa altından kalkılamaz bir yükle karşı karşıya kalır. Anlık Facebook&#8217; a yazılan yorum, mesaj yada benzeri girdileri düşündüğümüzde ajaxın hava yastığı görevi gördüğünü hayal etmek güç olmasa gerek. Özetlemek gerekirse, ajax yaklaşımı şekilden ibaret değildir ;) Konumuza geri dönelim.<br />
<a href="http://www.apostylee.com/wp-content/uploads/2011/06/loadmoredata.png"><img class="alignnone size-large wp-image-1667" title="loadmoredata" src="http://www.apostylee.com/wp-content/uploads/2011/06/loadmoredata-600x463.png" alt="" width="600" height="463" /></a><br />
<span id="more-1663"></span><br />
Mekanızma şu şekilde çalışıyor. Ekranda listelediğimiz kayıtlardan sonuncusunun id sini post edip, bu id den küçük olan son 2 kaydı ekrana basıyoruz.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
    $(function () {
        sonId(null);
        $('.daha').live(&quot;click&quot;, function () {
            var id = $(this).attr(&quot;id&quot;);
            var t = $(this);

            t.before(&quot;&lt;img src=\&quot;@Url.Content(&quot;~/content/images/yukleniyor.gif&quot;)\&quot; class=\&quot;yukleniyor\&quot; title=\&quot;Yükleniyor, lütfen bekleyin..\&quot; /&gt;&quot;);
            t.hide();

            $.ajax({
                type: &quot;POST&quot;,
                url: &quot;@Url.Content(&quot;~/home/getir/&quot;)&quot;,
                data: &quot;SonId=&quot; + id,
                cache: false,
                success: function (data) {
                    if (data.sonId == -1) {
                        t.before(&quot;&lt;span&gt;Tüm kayıtlar bunlar.&lt;/span&gt;&quot;);
                        $(&quot;.yukleniyor&quot;).remove();
                        t.remove();
                        return;
                    }
                    $.each(data.m,function(i, item){
                        $(&quot;#liste&quot;).append(&quot;&lt;li id=\&quot;&quot;+item.id+&quot;\&quot; class=\&quot;hide\&quot;&gt;&lt;h5&gt;&quot;+item.baslik+&quot;&lt;/h5&gt;&lt;p&gt;&quot;+item.icerik+&quot;&lt;/p&gt;&lt;/li&gt;&quot;);
                        $(&quot;#liste li:last&quot;).fadeIn(&quot;slow&quot;);
                    });

                    sonId(data.sonId);
                    $(&quot;.yukleniyor&quot;).remove();
                    t.show();
                }
            });
            return false;
        });

        function sonId(gelen) {
            var id;
            if (gelen == null) {
                id = $(&quot;#liste li:first&quot;).attr(&quot;id&quot;);
            }
            else {
                id = gelen;
            }
            $(&quot;.daha&quot;).attr(&quot;id&quot;, id);
        }
    });
&lt;/script&gt;

&lt;ul id=&quot;liste&quot;&gt;
    @foreach (var item in Model)
    {
        &lt;li id=&quot;@item.id&quot;&gt;&lt;h5&gt;@item.baslik&lt;/h5&gt;&lt;p&gt;@item.icerik&lt;/p&gt;&lt;/li&gt;
    }
&lt;/ul&gt;

&lt;a href=&quot;#&quot; class=&quot;daha&quot;&gt;daha fazla&lt;/a&gt;
</pre>
<p>Home kontrolümüzdeki getir adında ki aksiyonumuz;</p>
<pre class="brush: csharp; title: ; notranslate">
  public ActionResult Getir()
        {
            //System.Threading.Thread.Sleep(2000); // yükleniyor mesajını görmek için biraz bekleme yapıyoruz ;)

            int sonId = Convert.ToInt32(Request.Form[&quot;SonId&quot;]);

            var result = context.mesajs.Where(x=&gt;x.id&lt;sonId).OrderByDescending(x=&gt;x.id).Skip(_skip).Take(_take);

            if (result.Count() == 0)
            {
                return Json(new { sonId = -1}, JsonRequestBehavior.AllowGet);
            }

            return Json(new { m = result, sonId = result.First().id }, JsonRequestBehavior.AllowGet);
        }
</pre>
<p>Bu örneği php, asp yada farklı bir dillede gerçekleştirebilirsiniz. Ben örneği asp.net de yapıyorum diye illa asp.net de olacak diye bir şart yok yani ;) Projenin çalışır haline <a href="http://95.0.146.135/loadmoredata" target="_blank">buradan</a> bakabilir, <a href="http://www.apostylee.com/wp-content/uploads/2011/06/LoadMoreData.zip">buradan </a>da indirebilirsiniz.</p>
<div class="shr-publisher-1663"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/ajax-daha-fazla-kayit-goster-olayi-load-more-data/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Textbox içinde arama (Twitter Style)</title>
		<link>http://www.apostylee.com/twitter-style-search-textbox/</link>
		<comments>http://www.apostylee.com/twitter-style-search-textbox/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 07:37:30 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[arama]]></category>
		<category><![CDATA[jqueryui]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[mvc3]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[style]]></category>
		<category><![CDATA[textarea]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1653</guid>
		<description><![CDATA[Twitter da tweet yazarken @ işaretiyle başlayıp yazmaya başladığımızda, arkadaşlarımızı bulmamıza olanak sağlayan bir arama mekanızması bulunuyor. Geçenlerde lazım oldu epey bir aradım fakat tam olarak bu işi yapan bir betiğe rastlayamadım, bende isteğime en yakın örneği bulup üzerinde bir kaç ufak değişiklikle amacıma ulaştım. Faydalandığım örneğin adresini bir türlü bulamadım, bu yüzden paylaşamıyorum :S [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Twitter da tweet yazarken <strong>@</strong> işaretiyle başlayıp yazmaya başladığımızda, arkadaşlarımızı bulmamıza olanak sağlayan bir arama mekanızması bulunuyor. Geçenlerde lazım oldu epey bir aradım fakat tam olarak bu işi yapan bir betiğe rastlayamadım, bende isteğime en yakın örneği bulup üzerinde bir kaç ufak değişiklikle amacıma ulaştım. Faydalandığım örneğin adresini bir türlü bulamadım, bu yüzden paylaşamıyorum :S Olayın temelinde <a href="http://jqueryui.com/demos/autocomplete/" target="_blank">jQueryUi &#8211; Autocomplete</a>&#8216; nin <a href="http://jqueryui.com/demos/autocomplete/#multiple" target="_blank">Multiple Values</a> özelliği bulunuyor.</p>
<p>Bu işi yaparken jQuery ve jQueryUi yi kullanıyoruz, diğer dinamik kısım için php, asp, java vb.. diller kolaylıkla kullanılabilir. Ben asp.net mvc (c#) ile bu örneği gerçekleştirdim. Mekanızma şöyle çalışıyor; adres satırından aranacak bilgiyi gönderip, veritabanında aramamızı gerçekleştirip sonucu geriye json olarak döndürüyoruz.</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/twitterstylesearch.png"><img class="size-large wp-image-1655 aligncenter" title="twitterstylesearch" src="http://www.apostylee.com/wp-content/uploads/2011/06/twitterstylesearch-600x354.png" alt="" width="600" height="354" /></a><br />
<span id="more-1653"></span><br />
Javascript kodlarımız (<strong>textAreaAutoComplete.js</strong>);</p>
<pre class="brush: jscript; title: ; notranslate">
$(function () {
    function split(val) {
        return val.split(/ \s*/);
    }
    function extractLast(term) {
        return split(term).pop();
    }

    $(&quot;#search&quot;)
		.bind(&quot;keydown&quot;, function (event) {
		    if (event.keyCode === $.ui.keyCode.TAB &amp;&amp;
					$(this).data(&quot;autocomplete&quot;).menu.active) {
		        event.preventDefault();
		    }
		})
		.autocomplete({
		    minLength: 0,
		    selectFirst: true,
		    source: function (request, response) {
		        if (extractLast(request.term).substr(0, 1) == &quot;@&quot;) {
		            $.getJSON(root + &quot;kullanici/search/&quot;, {
		                term: extractLast(request.term)
		            }, response);
		        }
		    },
		    focus: function () {
		        return false;
		    },
		    select: function (event, ui) {
		        var terms = split(this.value);
		        terms.pop();
		        terms.push(ui.item.value.split(' ')[0]);
		        terms.push(&quot;&quot;);
		        this.value = terms.join(&quot; &quot;);
		        return false;
		    }
		});
});
</pre>
<p>Veritabanında arama işlemini yapan action methodumuz.</p>
<pre class="brush: csharp; title: ; notranslate">
        public ActionResult search()
        {
            string strParameter = Request.QueryString[&quot;term&quot;].Replace(&quot;@&quot;, string.Empty).Replace(&quot;%40&quot;,string.Empty);

            var result = db.kullanicis.Where(x =&gt; x.takmaAd.Contains(strParameter));

            if (result.Count() == 0)
            {
                return null;
            }
            else
            {
                return Json(result.Select(x =&gt; &quot;@&quot;+x.takmaAd +&quot; &quot;+x.adSoyad), JsonRequestBehavior.AllowGet);
            }
        }
</pre>
<p>Çalışan örneğe <strong><a href="http://95.0.146.135/twitterStyleSearch" target="_blank">buradan</a></strong> ulaşabilir, <strong><a href="http://www.apostylee.com/wp-content/uploads/2011/06/twitterStyleSearch.zip" target="_blank">buradan</a></strong> indirebilirsiniz.</p>
<div class="shr-publisher-1653"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/twitter-style-search-textbox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Easy Db Tool ile veritabanı işlemlerini kolayca halledin.</title>
		<link>http://www.apostylee.com/easy-db-tool-ile-veritabani-islemlerini-kolayca-halledin/</link>
		<comments>http://www.apostylee.com/easy-db-tool-ile-veritabani-islemlerini-kolayca-halledin/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 12:36:03 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[araç]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[easydb]]></category>
		<category><![CDATA[mssql]]></category>
		<category><![CDATA[önbellek]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[veritabanı]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1643</guid>
		<description><![CDATA[Epey bir zaman kullandığım veritabanı aracımı sizlerle paylaşmak istedim. Bu vesileyle üzerimde büyük emeği ve desteği bulunan sevgili arkadaşım, kardeşim Yunus Emre Çavuşoğlu&#8216; na teşekkürlerimi sunmak istiyorum. Bu araçla birlikte; Açık kaynak olduğu için, istediğiniz gibi şekillendirebilirsiniz. Veritabanına ekleme, silme ve güncelleme işlemlerini kolaylıkla yapabilirsiniz. Veritabanında ki bilgileri kolayca DataTable ye kolayca aktarabilirsiniz. Oluşturduğunuz formdaki eleman [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><img class="size-full wp-image-1644 alignright" title="easydb" src="http://www.apostylee.com/wp-content/uploads/2011/06/easydb.png" alt="" width="169" height="48" />Epey bir zaman kullandığım veritabanı aracımı sizlerle paylaşmak istedim. Bu vesileyle üzerimde büyük emeği ve desteği bulunan sevgili arkadaşım, kardeşim <strong><a href="http://friendfeed.com/yunusemre61" target="_blank">Yunus Emre Çavuşoğlu</a></strong>&#8216; na teşekkürlerimi sunmak istiyorum.</p>
<p>Bu araçla birlikte;</p>
<ol>
<li>Açık kaynak olduğu için, istediğiniz gibi şekillendirebilirsiniz.</li>
<li>Veritabanına ekleme, silme ve güncelleme işlemlerini kolaylıkla yapabilirsiniz.</li>
<li>Veritabanında ki bilgileri kolayca DataTable ye kolayca aktarabilirsiniz.</li>
<li>Oluşturduğunuz formdaki eleman isimlerinin veritabanındaki isimlerle aynı olması şartıyla bir kerede formdaki tüm bilgileri ekleyebilir veya güncelleyebilirsiniz. <em>(* alan adlarının başına 3 karakterli kontrollerin kısaltılmış ön ekinin girilmesi gereklidir. Örneğin; <strong><span style="color: #ff0000;">txt</span></strong>soyadi, <strong><span style="color: #ff0000;">ddl</span></strong>sehir, <strong><span style="color: #ff0000;">rbl</span></strong>cinsiyet gibi..)</em></li>
<li>Veritabanında ki bilgileri DataTable ye aktarırken bilgiyi önbellekte (cache) tutma ve bu belleği basit bir şekilde yönetme.</li>
</ol>
<p>Kullanımı, öncelikle veritabanında ki tablomuza karşılık gelen bir sınıf yazıyoruz. Bu sınıfta id alanını belirtmiyoruz , zamanında böyle yapmışım böyle kalmış :)</p>
<pre class="brush: csharp; title: ; notranslate">
    // Poco Class
    public class testTable
    {
        public string name { get; set; }
        public string email { get; set; }
        public DateTime? createDate { get; set; }
        public int? age { get; set; }
    }
</pre>
<p><strong>Normal ekleme işlemi</strong></p>
<pre class="brush: csharp; title: ; notranslate">
            testTable tt = new testTable
            {
                name = &quot;test&quot;,
                email = &quot;mail@mail.com&quot;,
                age = 18,
                createDate = DateTime.Now
            };

            db.Insert(tt, true);
</pre>
<p><strong>Formda ki bilgileri ekleme işlemi;</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div runat=&quot;server&quot; id=&quot;divForm&quot;&gt;
 name &lt;asp:TextBox runat=&quot;server&quot; ID=&quot;txtname&quot; /&gt; &lt;br /&gt;
 email &lt;asp:TextBox runat=&quot;server&quot; ID=&quot;txtemail&quot; /&gt; &lt;br /&gt;
 age &lt;asp:TextBox runat=&quot;server&quot; ID=&quot;txtage&quot; /&gt; &lt;br /&gt;
 &lt;asp:Button Text=&quot;Add&quot; runat=&quot;server&quot; ID=&quot;add&quot; onclick=&quot;add_Click&quot; /&gt;
&lt;/div&gt;
</pre>
<pre class="brush: csharp; title: ; notranslate">
db.Insert(new testTable(),divForm,false);
</pre>
<p>Örneklerde ki true, false olarak ifade ettiğimiz değer, eklenilen kaydın id sinin geriye integer olarak dönüp dönmeyeceğini ifade ediyor. Diğer örnekler ve EasyDbTool için gitHub sayfasını ziyaret edebilirsiniz <span style="color: #ff0000;"><strong><a href="https://github.com/apoStyLEE/easy-Db-Tools">https://github.com/apoStyLEE/easy-Db-Tools</a></strong></span></p>
<div class="shr-publisher-1643"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/easy-db-tool-ile-veritabani-islemlerini-kolayca-halledin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DataAnnotationsExtensions ile form doğrulama (validation)</title>
		<link>http://www.apostylee.com/dataannotationsextensions/</link>
		<comments>http://www.apostylee.com/dataannotationsextensions/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 07:45:29 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[DataAnnotationsExtensions]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mvc3]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1628</guid>
		<description><![CDATA[Asp.Net Mvc&#8217; de doğrulama (validation) işlemleri için modelimizdeki alanlara açıklamalar (Annotations) yazıyoruz. Bu alan zorunludur yada en fazla 10 karakter girilebilir gibi en temel doğrulama kuralları varsayılan olarak gelirken, e-posta yada adres doğrulama gibi işlemler için kendi doğrulama fonksiyonlarımızı yazıyoruz. Nuget Gallery deki DataAnnotationsExtensions.MVC3 paketiyle bu ekstra yükten kurtulabiliyoruz. İlk göze çarpanlar; e-posta doğrulama, en az [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Asp.Net Mvc&#8217; de doğrulama (validation) işlemleri için modelimizdeki alanlara açıklamalar (Annotations) yazıyoruz. Bu alan zorunludur yada en fazla 10 karakter girilebilir gibi en temel doğrulama kuralları varsayılan olarak gelirken, e-posta yada adres doğrulama gibi işlemler için kendi doğrulama fonksiyonlarımızı yazıyoruz. <a href="http://www.nuget.org/" target="_blank">Nuget Gallery</a> deki <a href="http://www.nuget.org/List/Packages/DataAnnotationsExtensions.MVC3" target="_blank">DataAnnotationsExtensions.MVC3</a> paketiyle bu ekstra yükten kurtulabiliyoruz. İlk göze çarpanlar; e-posta doğrulama, en az uzunluk, adres doğrulama, şifre uyumu ve dosya uzantısı kontrolü. Daha fazlası için projenin <strong><a href="http://dataannotationsextensions.org/" target="_blank">ana sayfasına</a></strong> bakabilirsiniz.</p>
<p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/DataAnnotationsExtensions.png"><img class="aligncenter" title="DataAnnotationsExtensions" src="http://www.apostylee.com/wp-content/uploads/2011/06/DataAnnotationsExtensions-600x520.png" alt="" width="600" height="520" /></a></p>
<p>Paketleri projemize nasıl eklediğimizi <strong><a href="http://www.apostylee.com/paket-yonetim-konsolu-package-manager-console/" target="_blank">şurada</a></strong> yazmıştım. Örnek kullanım şu şekilde.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class modelim
    {
        public int id { get; set; }

        [Email]
        [Required]
        public string eposta { get; set; }

        [FileExtensions(&quot;png|jpg|jpeg|gif&quot;)]
        public string dosyaAdi { get; set; }

        [Min(2,ErrorMessage=&quot;en az uzunluk 2&quot;)]
        public int sayi { get; set; }

        [Required]
        public string sifre { get; set; }
        [Required]
        [EqualTo(&quot;sifre&quot;,ErrorMessage=&quot;Şifreler aynı değil&quot;)]
        public string sifreTekrar { get; set; }

        [Url]
        public string adres { get; set; }
    }
</pre>
<div class="shr-publisher-1628"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/dataannotationsextensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aSanalPos kullanıma hazır.</title>
		<link>http://www.apostylee.com/asanalpos-hazir/</link>
		<comments>http://www.apostylee.com/asanalpos-hazir/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 10:15:20 +0000</pubDate>
		<dc:creator>apoStyLEE</dc:creator>
				<category><![CDATA[Asp.Net]]></category>
		<category><![CDATA[akbank]]></category>
		<category><![CDATA[banka]]></category>
		<category><![CDATA[garanti]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[iş bankası]]></category>
		<category><![CDATA[sanalpos]]></category>
		<category><![CDATA[yapıkredi]]></category>

		<guid isPermaLink="false">http://www.apostylee.com/?p=1614</guid>
		<description><![CDATA[Sanal posun lazım olduğu yerlerde kullandığım basit bir sınıfım vardı. Biraz düzenleyip sizlerle paylaşmak istedim. Esasında benim yaptığım bir şey yok, sadece bankaların verdiği kodları bir araya topladım. Projenize basitçe ekleyebilir ve kullanabilirsiniz. Şimdilik şu bankaların posları bulunuyor; İş Bankası Garanti Bankası Vakıfbank Akbank Yapı Kredi FinansBank DenizBank Projenin Git sayfası https://github.com/apoStyLEE/aSanalPos Örnek Kullanım;]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.apostylee.com/wp-content/uploads/2011/06/asanalposlogo.png"><img class="alignright" title="asanalposlogo" src="http://www.apostylee.com/wp-content/uploads/2011/06/asanalposlogo.png" alt="" width="245" height="75" /></a>Sanal posun lazım olduğu yerlerde kullandığım basit bir sınıfım vardı. Biraz düzenleyip sizlerle paylaşmak istedim. Esasında benim yaptığım bir şey yok, sadece bankaların verdiği kodları bir araya topladım. Projenize basitçe ekleyebilir ve kullanabilirsiniz. Şimdilik şu bankaların posları bulunuyor;</p>
<ol>
<li>İş Bankası</li>
<li>Garanti Bankası</li>
<li>Vakıfbank</li>
<li>Akbank</li>
<li>Yapı Kredi</li>
<li>FinansBank</li>
<li>DenizBank</li>
</ol>
<p><strong>Projenin Git sayfası <a href="https://github.com/apoStyLEE/aSanalPos">https://github.com/apoStyLEE/aSanalPos</a></strong></p>
<p>Örnek Kullanım;</p>
<pre class="brush: csharp; title: ; notranslate">
public void Cekim() {

            // kullanıcıdan kart bilgilerini alıyoruz.
            PosForm pf = new PosForm {
                ay = 1,
                yil=2011,
                guvenlikKodu = 123,
                kartNumarasi = 1234567891234568,
                kartSahibi = &quot;kart sahibi&quot;,
                taksit = 3,
                tutar = 1.00
            };

            // Poslarımıza yukarıdaki bilgileri gönderiyoruz.
            Pos p = new Pos();

            // Örnek gönderim;
            p.Akbank(pf);
            //p.GarantiBankasi(pf);
            //p.VakifBank(pf);
            //p.YapiKredi(pf);
            //p.IsBankasi(pf);

            // Poslardan geriye dönen bilgileri alıyoruz.

            if (p.sonuc)
            {
                // Çekim işlemi başarılı ise, geri dönen bilgileri alıyoruz.
                // Genellikle bu bilgiler veritabanında saklanır.
                // Bankadan bankaya değişiklik göstereceği için, alanlardan bazıları boş gelebilir.
                Response.Write(p.referansNo);
                Response.Write(p.groupId);
                Response.Write(p.transId);
                Response.Write(p.code);
            }
            else
            {
                // Çekim işlemi herhangi bir sebepden dolayı olumsuz sonuçlanmışsa, bankadan dönen hatayı alıyoruz.
                // Hata kodlarının açıklamaları ilgili banka dökümantasyonunda belirtilmiştir.
                Response.Write(p.sonuc);
                Response.Write(p.hataMesaji);
                Response.Write(p.hataKodu);
            }

        }
</pre>
<div class="shr-publisher-1614"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.apostylee.com/asanalpos-hazir/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
