Jquery ile Saydamlık(Opacity) Kullanarak Menü Hazırlama

Bu yazımda Jquery kullanarak hazırladığım bir menü örneğini sizlere tanıtacağım. Birçok sitede kullanılan bu örneği Jquery ile hazırladım ve elementlerin saydamlıklarıyla oynayarak efektif bir menü yapmaya çalıştım. Sonuçta yaptığım örnek Flash veya Silverlight ile hazırlanan örnekleri andırıyor. Ayrıca jquery kodlamalarımız ile oynayarak örneğimizi daha efektif daha görsel hale getirebiliriz. Sonuçta güzel ve kullanılabilir bir menü sisteminin oluştuğunu düşünüyorum. Şimdi kodlarımıza ve örneğimize göz atalım.

Örneği hazırlarken kullandığım html kodlar ve bu kodlara göre yazdığım Jquery kodlarım şöyle:

  // Html kodlar    
  <div id="menu">
      <a href="#">Anasayfa</a>
      <a href="#">Deneme 1</a>
      <a href="#">Deneme 2</a>
      <a href="#">Deneme 3</a>
      <a href="#">Deneme 4</a>
  </div>

  // Jquery kodlarımız
  $(function() {
        $("#menu a").hover(function() {
            $(this).stop().animate({ /* stop() kontrolü*/
                "opacity": "0.3"
            }, 500 /*süre*/);
        }, function() {
            $(this).animate({
                "opacity": "1"
            }, 1000 /*süre*/);
        });
    });

Görüldüğü gibi Jquery içinde yer alan hover fonksiyonu sayesinde istediğimiz elementin veya elementlerin mouseover ve mouseout eventlarını kontrol ediyoruz. Kodlarda ve örnekte en önemli nokta saydamlık değiştirme süreleri ve bunu kontrol eden stop() fonksiyonu. Bu fonksiyon ile saydamlık değişme süreci başlamış olan bir elementin saydamlık değiştirme olayı süre bitmeden tekrarlandığında bir önceki süreci sonlandırıyoruz ve yeni süreç işliyor. Bu işlem görselliğin daha iyi olmasını ve görselliğin Flash ve Silverlight örneklerine benzemesini sağlıyor. Daha iyi anlamak için bu fonksiyonu örnekten kaldırarak deneyebilirsiniz.

Hazırladığım örneği buradan görebilir, buradan da dosyaları indirebilirsiniz.

Örnekte menüleri renklendirmek yerine arka plan için resim kullandım. Bu tür örneklerde genellikle resim tercih ediliyor. Saydamlık değiştirme esnasında renklerin değiştirilmesi pek tercih edilmiyor. Ancak yine de yapılabilir bir yöntem. Ben ise örneğimde bir adet resim kullandım. Ayrıca örneği hem yatay menü hem de dikey menü olarak hazırladım.

Jquery ile Tek Tek Kayan Alan Oluşturma ve Ajax ile Rss Okuma Örneği

Bu yazımda Jquery ile hazırladığım uygulamalardan birini daha sizlerle paylaşacağım. Ayrıca hem basit yapısını hem de örnek olması açısından Ajax ile Rss okuma örneği yaparak bu örneği sizlere sunacağım. Uygulamam ise belli bir alanda bulunan elementlerin belli bir süre aralığında sürekli birer birer slayt şeklinde kayması ile oluşuyor. Oldukça faydalı ve kullanışlı bir uygulama olduğunu düşünüyorum. Bu örneği daha kullanışlı yapmak için de Rss okuma örneğini Ajax ile Class kullanarak hazırladım. Böylece hem örneğimi hem de Ajax ile Class kullanma mantığını daha iyi anlayacağımızı düşünüyorum. Şimdi uygulamamızın yapısına, kodlarına ve örneğimizin de kodlarına bakalım.

Öncelikle tek tek kayan alan uygulamsı için kullandığım html yapı şu şekilde olmalı.

  <div id="alan">
    <p><b>Birinci Alan</b></p>
    <p>İkinci Alan</p>
    <p>Üçüncü Alan</p>
    <p>Dördüncü Alan</p>
    <p>Beşinci Alan</p>
  </div>

Bu yapıyı kullanan ve tek tek kaymasının sağlayan Jquery kodlarım ise şöyle olmalı.

  <script type="text/javascript">
    var aktif=0, gosterim_adeti=5;
    var dizi = new Array();
    $(document).ready(function(){
      var boyut = $("#alan p").length;
      for(var i=0; i<boyut; i++)
      {
        dizi[i] = $("#alan p:eq("+i+")").html();
      }
      $("#alan").html("");
      for(var i=0; i<gosterim_adeti; i++)
      {
        $("#alan").append("<p>"+dizi[i]+"</p>");
      }
      setInterval(degistir, 2000);
      function degistir()
      {
        aktif = (aktif + 1)%boyut;
        $("#alan").html("");
        var ilk = aktif-1;
        if(ilk<0)ilk = ilk+boyut;
        $("#alan").append("<p>"+dizi[ilk]+"</p>");
        for(var i=aktif; i<aktif + gosterim_adeti;i++)
        {
          $("#alan").append("<p>"+dizi[(i%boyut)]+"</p>");
        }
        $("#alan p:first").slideUp(500);
        $("#alan p:last").css("height","0px").animate({height:"40px"},600);
        //verdiğimiz yükseklik css ile belirttiğimiz yükseklik
        //ayrıca alan id'li elementin yüksekliğini hesaplayarak vermeliyiz.
      }
    });
  </script>

Görüldüğü uygulama kodlarımız böyle. Uygulamanın bu halini buradan görebilirsiniz. Daha önce de belirttiğim gibi bu uygulamayı Ajax ile Class kullanma yöntemi ile Rss okuma biçiminde hazırladım. Bu örnek için html yapımız ve script kodlarımız tamamen aynı. Fakat script kodlarında Ajax kullandığımız için çağırdığımız yerde birkaç değişiklik var. Bu değişiklikleri de örneği inceleyerek görebilirsiniz. Şimdi ise Ajax ile Rss okuma örneğimizin kodlarına bakalım.

public partial class jquery_slayt_alan : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    [WebMethod]
    public static List<rss> rss_getir()
    {
      System.Threading.Thread.Sleep(500);
      XmlTextReader okuyucu = new XmlTextReader("http://www.mehmetduran.com/rss.aspx");
      XmlDocument dokuman = new XmlDocument();
      dokuman.Load(okuyucu);
      XmlNode node = dokuman.SelectSingleNode("/rss");
      XmlNodeList title = dokuman.SelectNodes("/rss/channel/item/title");
      XmlNodeList link = dokuman.SelectNodes("/rss/channel/item/link");

      List<rss> r = new List<rss>();
      for (int i = 0; i < 20; i++)
      {
        rss ro = new rss();
        ro.title = title.Item(i).InnerText;
        ro.link = link.Item(i).InnerText;
        r.Add(ro);
      }
      return r;
    }
}

public class rss
{
  public string title { get; set; }
  public string link { get; set; }
}

Görüldüğü gibi Ajax ile Rss okuma işlemi de böyle. Daha önce yazmış olduğum yazımdaki gibi bir yapı kullanarak (Class kullanarak) bu örneği hazırladım. Umarım faydalı bir çalışma olmuştur.

Rss okuma örneğini buradan, basit html ile hazırladığımız uygulamayı ise buradan görebilirsiniz.
İki örneği de içeren örnek projeye de buradan ulaşabilirsiniz.

İyi Çalışmalar!

Asp.net ile Veritabanı İşlemlerinde Etkin Kodlama Yöntemi(mysql)

Bu yazımda hazırladığımız projelerde veritabanı işlemleri için yapacağımız kodlamaları daha az ve daha etkin biçimde nasıl yapabileceğimizi göstermeye çalışacağım. Yazılım Mühendisliği dersinde bloğumu proje olarak sunacağım. Bu yüzden yaptığım kodlamaları en iyi biçimde optimize etmem gerekiyor. Bunların başında da veritabanı işlemleri için yazmış olduğum kodlar geliyor. Bunun için basit bir yöntem oluşturdum ve sizlerle paylaşacağım. Tabi ne kadar iyi ne kadar kullanışlı bilinmez ama daha önce yaptığım kodlamalara göre oldukça kullanışlı olduğunu söyleyebilirim.

Öncelikle veritabanı ve diğer işlemler için projelerimizde kendi class’larımızı veya namespace’lerimizi oluşturmalıyız. Böylelikle projemizde kodlama bakımından daha etkin bir yöntem kullanmış oluruz. Bloğumu da bu şekilde bir kodlama ile optimize etmek ve proje olarak sunacağım tarihe kadar hazırlamak istiyorum. Örnek kodlamayı aşağıdan görebilirsiniz.

public partial class veritabani : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    string sorgu = "select * from tablo_adi where parametre_1=@parametre_1 and parametre_2=@parametre_2";
    List<MySqlParameter> pm = new List<MySqlParameter>()
      {
        new MySqlParameter(){ ParameterName = "@parametre_1", Value = 100 },
        new MySqlParameter(){ ParameterName="@parametre_2", Value = "deneme"}
      };

    veritabanim vt = new veritabanim();
    GridView1.DataSource = vt.veri_al(sorgu, pm);
    GridView1.DataBind();
  }
}

public class veritabanim
{
  public veritabanim()
  {
    baglanti_cumlesi = "server=localhost; user=user; password=password; database=database;";
    baglanti = new MySqlConnection(baglanti_cumlesi);
  }

  private string baglanti_cumlesi;
  private MySqlConnection baglanti;

  //bu metotu kullanarak tüm sorgulamalarımızı çalıştırabiliriz. 
  public DataTable veri_al(string sorgu, List<MySqlParameter> parametreler)
  {
    MySqlDataAdapter adaptor = new MySqlDataAdapter(sorgu, baglanti_cumlesi);
    foreach (MySqlParameter pm in parametreler)
    {
      adaptor.SelectCommand.Parameters.Add(pm);
    }
    DataTable tablo = new DataTable();
    adaptor.Fill(tablo);
    return tablo;
  }
}

Görüldüğü gibi tek bir metot ile tüm sorgulamarımızı parametre kullanarak güvenli bir biçimde gerçekleştirebiliriz. Ayrıca tanımladığımız bağlantı nesnesini ve bağlantı cümlesini de public olarak tanımlayıp class dışından da erişebiliriz ve böylece tekrar tekrar bu nesneleri oluşturmaya gerek kalmaz.

Ayrıca verdiğim örnek kodlarda veritabanı olarak Mysql kullandım. Böylece .Net projelerimizde Mysql’e nasıl bağlanacağımızı ve nasıl verileri çekeceğimizi görmüş olduk.

Jquery ile Asp.net Sayfasına Ajax İsteğinde Bulunma

Bu yazımda Jquery ile Ajax işlemlerinde direk olarak sayfamıza Ajax isteğinde bulunmayı göstermeye çalışacağım. Daha önce Jquery ile Ajax işlemlerinde genelde metotları, ashx (generic handler) dosyalarını ve web servisleri kullanmıştık. Şimdi ise bunlara asp.net sayfamızı ekliyoruz ve Ajax isteğini asp.net sayfamıza yapıyoruz. Böylelikle Jquery ile Ajax işlemlerini daha iyi kavramış olacağız ve daha güzel uygulamalar geliştirebileceğiz. Ayrıca Ajax isteğinde bulunabileceğimiz nesneleri de yani seçeneklerimizi de artırmış oluyoruz. Şimdi bu uygulama için yazmamız gereken Jquery kodlarına bakalım.

Asp.net sayfamıza Ajax isteğinde bulunmak için aşağıdaki html yapısına göre Jquery kodlamasını yapacağız. Ancak şunu belirteyim ki sayfa isteğinde datatype olarak bir tipimiz yok. Daha önce bunu ashx dosyalarına Ajax isteğinde bulunurken görmüştük (Buradaki yazımda). Datatype json olan Ajax isteklerimizi metotlara ve web servislere yapıyorduk. Sayfalara datatype olmadan Ajax isteği yapacağız. Örnek kodlama aşağıdaki gibi olacak.

  //script kodlarımız
  <script type="text/javascript">
    $(document).ready(function(){
      $("#linkler a").click(function(){
        var adres = $(this).attr("href");
        //adres değişkeni sayfa.aspx gibi bir değer oluyor.
        $("#load").show();
        $.ajax({
          type:"post",
          //url'de adres değişkeninden gelen sayfayı belirliyoruz.
          //sonuçta url:"sayfa.aspx" gibi bir değer elde ediyoruz.
          url:adres,
          data:{},
          success:function(msg)
          {
            $("#sonuc").html(msg); //sayfa sonucunu yazdırıyoruz.
            $("#load").hide();
          }
        });
        return false;
      });
    });
  </script>

  // html kodlarımız
  <div id="linkler">
    <a href="sayfa1.aspx">Sayfa 1</a>
    <a href="sayfa2.aspx">Sayfa 2</a>
    <a href="sayfa3.aspx">Sayfa 3</a>
  </div>

Görüldüğü gibi eklenen sayfalara istekte bulunup bilgileri elde ediyoruz. İstekte bulunduğumuz sayfada tüm server kodları ve server kontrolleri çalıştırılmış olarak geliyor. Böylece Jquery ile Ajax işlemlerini daha iyi kavramış oluyoruz.

Artık daha iyi uygulamalar geliştirebiliriz. Örnek kodlarını verdiğim ve basit bir uygulama olarak hazırladığım projeyi buradan indirebilirsiniz. Ayrıca buradan da çalışır halini görebilirsiniz.

İyi Çalışmalar.

Asp.net ile ve Jquery Ajax ile Kur (Döviz) Bilgilerini Alma

Bu yazımda son dönemde ihtiyaç duyduğum ve kullandığım merkez bankasından döviz bilgilerini çekme örneğini sizlerle paylaşacağım. Bu örneği hem klasik asp.net sayfasında kullanarak hem de Jquery Ajax kullanarak hazırladım. İsteyenler iki yöntemden birini seçerek bu uygulamayı kullanabilir. Bu örneği daha önce yazmış olduğum Xml Belgelerden Veri Çekme yazısından faydalanarak hazırladım. Bu örnekte bir önceki yazıma göre birkaç değişik yöntem söz konusu. Bu farklılıkları kodları inceleyerek görebilirsiniz. Şimdi merkez bankasının sağlamış olduğu kur bilgilerini (xml dosyaya buradan ulaşabilirsiniz) hem normal asp.net sayfamızda kullanmaya hem de Jquery Ajax ile kullanmaya bakalım.

Öncelikle verileri çekeceğimiz xml dosyanın yapısını inceleyelim. Çünkü verileri çekerken kullanacağımız değişkenlerde bu yapıya ihtiyacımız var. Verileri alacağımız xml dosyanın yapısı şöyle:

  <?xml version="1.0" encoding="iso-8859-9"?>
  <?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
  <Tarih_Date Tarih="08.05.2009" Date="05/08/2009">
    <Currency Kod="USD" CurrencyCode="USD">
      <Unit>1</Unit>
      <Isim>AMERİKAN DOLARI</Isim>
      <CurrencyName>US DOLLAR</CurrencyName>
      <ForexBuying>1.547</ForexBuying>
      <ForexSelling>1.5545</ForexSelling>
      <BanknoteBuying>1.5459</BanknoteBuying>
      <BanknoteSelling>1.5568</BanknoteSelling>
      <CrossRateUSD>1</CrossRateUSD>
      <CrossRateOther></CrossRateOther>
    </Currency>
  </Tarih_Date>

Bu yapıya uygun olarak klasik asp.net sayfasında yazacağımız kodlar ise şu şekilde olmalı.

  protected void Page_Load(object sender, EventArgs e)
  {
    piyasa(); //bilgileri alan metot

    // Değerleri kontrollere yazdırıyoruz.
    d_alis.InnerHtml = dolar_alis.ToString();
    d_satis.InnerHtml = dolar_satis.ToString();
    e_alis.InnerHtml = euro_alis.ToString();
    e_satis.InnerHtml = euro_satis.ToString();
  }
  public double dolar_alis, dolar_satis;
  public double euro_alis, euro_satis;
  public void piyasa()
  {
    XmlTextReader okuyucu = new XmlTextReader("http://www.tcmb.gov.tr/kurlar/today.xml");
    XmlDocument dokuman = new XmlDocument();
    dokuman.Load(okuyucu);
    XmlNode dolar = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='US DOLLAR']");
    XmlNode euro = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='EURO']");
    dolar_alis = double.Parse(dolar.ChildNodes[3].InnerText);
    dolar_satis = double.Parse(dolar.ChildNodes[4].InnerText);
    euro_alis = double.Parse(euro.ChildNodes[3].InnerText);
    euro_satis = double.Parse(euro.ChildNodes[4].InnerText);
  }

Klasik asp.net sayfasında bu şekilde verileri çekip herhangi bir kontrole değerleri bu şekilde yazdırabiliyoruz. Bu uygulamayı örneklendirmek için bir de Jquery Ajax ile hazırladım. Bunun için yazmış olduğum server taraflı Webmethod ve class ise aşağıdaki gibi olacak.

  public class kurlar
  {
    public double dolar_alis;
    public double dolar_satis;
    public double euro_alis;
    public double euro_satis;
  }

  [System.Web.Services.WebMethod]
  public static kurlar kurlari_al()
  {
    kurlar k = new kurlar();
    XmlTextReader okuyucu = new XmlTextReader("http://www.tcmb.gov.tr/kurlar/today.xml");
    XmlDocument dokuman = new XmlDocument();
    dokuman.Load(okuyucu);
    XmlNode dolar = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='US DOLLAR']");
    XmlNode euro = dokuman.SelectSingleNode("/Tarih_Date/Currency[CurrencyName='EURO']");
    k.dolar_alis = double.Parse(dolar.ChildNodes[3].InnerText);
    k.dolar_satis = double.Parse(dolar.ChildNodes[4].InnerText);
    k.euro_alis = double.Parse(euro.ChildNodes[3].InnerText);
    k.euro_satis = double.Parse(euro.ChildNodes[4].InnerText);
    return k;
  }

Bu şekilde yazdığımız kodlardan sonra sayfamızın html bölümünde yazmış olduğumuz Webmethod’a Ajax isteği ile erişip verileri alacağız. Bunun için yazacağımız script kodlar ise şöyle olmalı.

<script type="text/javascript">
  $(function(){
      kurlar();
      $("#yenile").click(function(){
          kurlar();
      });
  });
  function kurlar()
  {
    $.ajax({
        type: "POST",
        url: "ajax_kur.aspx/kurlari_al",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg){
            $("#d_alis").html(msg.d.dolar_alis);
            $("#d_satis").html(msg.d.dolar_satis);
            $("#e_alis").html(msg.d.euro_alis);
            $("#e_satis").html(msg.d.euro_satis);
        }
    });
  }
</script>

Görüldüğü gibi merkez bankasından döviz (kur) bilgilerini bu şekilde iki yöntemle alabiliriz. Hazırlamış olduğum örneklerden klasik asp.net sayfası örneğini buradan, Jquery Ajax ile yapmış olduğum örneği ise buradan görebilirsiniz. Buradan da iki örneğin dosyalarını indirebilirsiniz. Hazırladığım örneklerde sadece Euro ve Dolar bilgilerini çekmekteyim. İsteyenler bu bilgilere ek olarak diğer verileri de çekebilirler.

Daha önceki yazım ile bu yazıdaki fark ise xml nodelar’ı ve özelliklerini seçerken yaptığımız farklılık. İlk yazımda belli bir node’u seçip o node’un altındaki tüm özellikleri alırken bu örnekte sadece belirlediğimiz değere sahip olan node’u seçip onun altından istediğimiz node’ların değerlerini alıyoruz. Bu örnekte kullanmış olduğumuz yöntem daha doğru bir yöntem. Eğer verilerin sıralamasında bir değişim olursa yazdığımız kodlarda değişim yapmaya gerek yok. Ancak bir önceki yazımdaki gibi yapmış olsaydık node’ların sırasını göz önüne almalıydık.

İyi Çalışmalar.

Web.config’de Dosya Upload için Gereken Ayarlar

Web.config dosyamızda aşağıdaki kodları (system.web tagı arasına) ekleyerek değerleri projemize göre ayarlamalıyız.

<httpRuntime
 executionTimeout="200" //sn cinsinden timeout süresi 
 maxRequestLength="20000" // kb cinsinden upload miktarı belirleme
 appRequestQueueLimit="5000"  //aynı anda karşılanacak istek sayısı
 requireRootedSaveAsPath="true"  //dosya yolu belirlemede root'tan başlanır
 shutdownTimeout="90"  //dk cinsinden isteklerin çalışma süresi
 />

Msdn’den bu ayar hakkında ve tüm özellikleri hakkında daha fazla bilgiye buradan ulaşabilirsiniz. Ayrıca bu ayarların Visual Studio 2003, 2005 ve 2010 ile .Net Framework (1.1, 2.0, 3.0, 4.0) sürümleri arasındaki farklarını da görebilirsiniz.

Bloğumda Kullandığım SiteMap Sınıfı

Bu yazımda bloğumda kullandığım arama motorları için ve SEO için vazgeçilmez olan SiteMap dosyası için yazdığım sınıfı sizlerle paylaşacağım. Yazdığım sınıfta veriler alınıp gerekli yapıya sokularak Xml sonucu (string olarak) yazdığım metot ile alıp kullanabiliyoruz. Yazımda hem Asp.net ile hem de MVC ile yazdığım sınıfın kullanımını göstereceğim. Daha önce paylaştığım RSS sınıfı gibi bu sınıfı da projelerimize direk olarak ekleyip kullanabiliriz. Yine bu sınıfta Sitemap oluşturmak için Linq to Xml yöntemini kullanmaktayım. Umarım faydalı olur ve birçok kişi kullanır. Şimdi yazdığım sınıfa ve kullanımına bakalım.

Öncelikle yazdığım SiteMap sınıfını buradan görebilir ve indirebilirsiniz. Yazımda nasıl kullanılacağını gösteren kodları yazacağım için sınıfın kodlarını yazmıyorum. Linkten direk olarak görebilir ve indirebilirsiniz.

Öncelikle Asp.net ile kullanıma bakalım. Bunun için aşağıdaki gibi bir kodlama yapmamız yeterli.

 
    protected void Page_Load(object sender, EventArgs e)
    {
      List<SitemapItem> veriler = new List<SitemapItem>()
      {
        new SitemapItem(){ loc = "http://mehmetduran.com", lastmod = DateTime.Now, changefreq = "daily", priority = "1" }
        // Burada veritabanından alınan veriler ile sitemap oluşturulacak.
      };
      Sitemap sitemap = new Sitemap(veriler);
      Response.Clear();
      Response.ContentType = "text/xml";
      Response.Write(sitemap.SitemapSonuc());
    }

MVC ile kullanım ise şöyle olmalı.

 
    public ActionResult SiteMap()
    {
      List<SitemapItem> veriler = new List<SitemapItem>()
    {
      new SitemapItem(){ loc = "http://mehmetduran.com", lastmod = DateTime.Now, changefreq = "daily", priority = "1" }
      // Burada veritabanından alınan veriler ile sitemap oluşturulacak.
    };
      Sitemap sitemap = new Sitemap(veriler);
      return Content(sitemap.SitemapSonuc(), "text/xml");
    }

Gerekli yerlerde ister el ile ister veritabanından alınan verilerle SiteMap’i rahatlıkla oluşturabilir ve kullanabiliriz. Bloğumda bu kodları kullanarak hazırladığım sitemap’e buradan ulaşabilirsiniz.

Arama motorları, SEO için oldukça önemli olan Sitemap için yazdığım bu sınıfın oldukça kullanışlı olduğunu düşünüyorum. Umarım faydalı olur ve kullanılır.

Yazdığım sınıfa buradan ulaşabilir ve indirebilirsiniz.

İyi Çalışmalar.

Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi)

Bu yazımda bloğumda kullandığım, çoklu mail ve dosya gönderimi yapabildiğim Email sınıfını paylaşıyorum. Maillerimi özellikle bloğuma gelen soruları cevaplamak için yazmış olduğum bu sınıfı kullanıyorum. Yazımın devamında ekran görüntüsünü de sizlerle paylaşacağım. Oldukça faydalı bir çalışma olduğunu düşünüyorum. Yine projelerimize direk olarak ekleyip kullanabileceğimiz bir sınıf. Birden fazla kişiye mail atabiliyor ve istediğimiz kadar da dosya gönderebiliyoruz. Şimdi bu sınıfa ve nasıl kullancağımıza bakalım.

Öncelikle yazmış olduğum sınıfı buradan görebilir ve indirebilirsiniz. Örnek kod olarak MVC’de yazmış olduğum kodları paylaşacağım. Asp.net ile de kodların kullanımı aynı. Ancak kodları aynen kullanabilmek için burada yazmış olduğum yazıda form yapısını ve dosya nesnelerini oluşturma yöntemini kullanabiliriz. MVC ile kullanım şöyle.

    [AcceptVerbs(HttpVerbs.Post)]
    [ValidateInput(false)]
    public ActionResult Mail(string MailBaslik, string MailIcerik, string MailAdres)
    {
      List<Attachment> dosyalar = new List<Attachment>();
      foreach (string isim in Request.Files)
      {
        var file = Request.Files[isim];
        dosyalar.Add(new Attachment(file.InputStream, file.FileName) { });
      }
      Mail m = new Mail(
        "smtp.live.com", 
        587, 
        "mail_hesap_adi@hotmail.com", 
        "mail_sifre", 
        "mail_gonderen@hotmail.com", 
        "Bu email mehmetduran.com'dan gönderilmiştir.", 
        true
        );
      m.Gonder(
        new List<string>() { MailAdres }, 
        MailBaslik, 
        MailIcerik, 
        dosyalar);
      return View();
    }

Bu şekilde yazdığımız sınıfı kullanarak istediğimiz sayıda kişiye istediğimiz kadar dosyayı (mail sunucusunun kotasını aşmamak koşuluyla) istediğimiz mail sunucusu ile gönderebiliyoruz. Şimdiye dek hem dosyalı hem de dosyasız birçok mail gönderimi yaptım ve bir sorun yaşamadım. Sitemde kullandığım email formunun görüntüsü ise aşağıdaki gibi.

Kullandığım Email Sınıfı (Çoklu Mail ve Dosya Gönderimi)

Mail göndermek için mail adreslerini, mail başlığını ve mail içeriğini sayfadaki kontrollerden alıyorum. Mail içeriği için FCK editör kullanıyorum ve içerik için oldukça esneklik sağlıyor. Dosya gönderimi için ise jQuery kullanarak dosya nesneleri oluşturuyorum ve bu nesnelerden seçtiğim dosyaları alıyorum. (jQuery ile dosya nesnesi oluşturmayı buradaki yazımda bulabilirsiniz.) Tüm bu girdileri alıp yazdığım sınıfı kullanarak maili gönderiyorum.

Altta yer alan kısımda ise mail atarken kullanacağım ayarları tuttuğum ve düzeltebildiğim formu görüyorsunuz. Mail atarken kullanacağımız bilgileri veritabanında ya da herhangi bir belgede tutup, bu şekilde tamamen dinamik bir sistem oluşturabiliriz. Böylece istediğimiz mail sunucusunu, mail hesabını kullanabiliriz.

Şu anda bu sistemi kullanıyorum ve sorunsuzca maillerimi gönderebiliyorum. Özellikle siteme gelen soruları cevaplamak için bu formu kullanıyorum. Umarım kullanmak isteyenlere de faydalı olur.

Yazdığım sınıfı buradan görebilir ve indirebilirsiniz.

Ayrıca daha önce yazmış olduğum buradaki yazımda da mail gönderme ile ilgili kodlarımı görebilirsiniz.

İyi Çalışmalar.

jQuery Ajax ile Dropdown Etkileşimleri (Eklenti ile)

Bu yazımda jQuery Ajax işlemlerinde Dropdown elementleri arasında etkileşim sağlayan eklentimi paylaşacağım. Son dönemde bu konuda oldukça soru oldu. Bu sorulara ve isteklere cevap verebilmek adına kullandığım eklentiyi paylaşacağım. Bu eklenti ile bir dropdown elementini kontrol ediyoruz. Kontrol edilen dropdown üzerinde bir seçim yapıldığında Ajax ile seçilen değere göre ilişkili veriler alınıp, diğer bir dropdown elementine aktarılıyor. Bunun en çok kullanıldığı durum ise şehirlere ait ilçelerin alınmasıdır. Şimdi eklentiyi nasıl kullanacağımıza ve örneğimize göz atalım.

Öncelikle hazırladığım jQuery eklentsini buradan görebilirsiniz. Eklentinin adı DropIslem‘dir. Eklentinin mutlaka alması gereken 2 parametresi vardır. Biri Ajax isteğinde bulunulacak ve seçilen değerle ilişkili verileri getirecek olan adres (url) parametresi ve Ajax isteği sonucu verileri alacak olan elementin id değerini belirten hedef parametresidir. Bunları öğrendikten sonra eklentimizi aşağıdaki gibi kullanabiliriz.

  $(function() {
    $("#Sehirler").DropIslem({
      adres: "Default.aspx/Ilceler",
      hedef: "#Ilceler"
    });
  });

Bu şekilde eklentimizi kullanabiliyor, dropdown elementleri arasında etkileşim sağlayabiliyoruz. Ayrıca eklenti içinde Webmethod ile alınan ilişkili verilerin iki değeri söz konusudur. Biri degerisimli dropdown elementine eklenen option elementinin value özelliğine atanırken, diğeri metinisimli değer ise option elementinin text özelliğine atanmaktadır. Buradaki deger ve metindeğerlerini Webmethod ile gelen Json tipindeki verilerin içerdiği özelliklere göre değiştirebiliriz.

Örneği çalışır halde buradan görebilir, buradan da indirebilirsiniz.

Ayrıca örnek içerisinde C# 3.0 ile gelen Generic Class olan List yapısını kullandım ve ilişkili verileri çekerken de Linq sorgusu yazdım. Bu bakımdan bu konularda örnek arayanlar için de faydalı olacaktır.

İyi çalışmalar.

Sayfaların Oluşma Sürelerini Hesaplama (HttpModule Kullanarak)

Bu yazımda web sayfalarımızın ne kadar sürede oluştuduğunu HttpModule kullanarak hesaplayacağız ve bu bilgiyi her sayfada göstereceğiz. Bu uygulamayı bloğumda da kullandım ve sayfaların oluşma sürelerini en altta sol tarafta saniye türünden görebilirsiniz. Birçok web sayfasında kullanılan, istatistiksel bilgi sağlayan, sayfaların çalışma hızını, performansını gösteren bir özellik. Bu uygulamayı HttpModule olarak hazırlayıp istediğimiz projeye ekleyip kullanabiliriz. Ayrıca basit bir işlem ile bu module’ü aktif veya pasif ederek çalışmasını kontrol edebiliriz. Şimdi yazacağımız kodlara göz atalım.

Öncelikle zaman ölçmede kullanacağımız Stopwatch sınıfı için kodları yazacağımız bölümeSystem.Diagnostics kütüphanesini eklemeliyiz. Ardından da aşağıdaki gibi bir kodlama ile sadece sayfaların oluşma sürelerini hesaplayan ve hesapladığı değeri sayfalara yazdıran bir HttpModule oluşturalım.

 
namespace MehmetDuran
{
  public class Zaman : IHttpModule
  {
    public void Dispose() { }
    public void Init(HttpApplication context)
    {
      context.BeginRequest += delegate(object sender, EventArgs e)
      {
        HttpContext Context = ((HttpApplication)sender).Context;
        Stopwatch zaman = new Stopwatch();
        Context.Items["zaman"] = zaman;
        zaman.Start();
      };
      context.EndRequest += delegate(object sender, EventArgs e)
      {
        HttpContext Context = ((HttpApplication)sender).Context;
        Stopwatch zaman = (Stopwatch)Context.Items["zaman"];
        zaman.Stop();
        if (Context.Response.ContentType == "text/html")
        {
          double SaniyeSure = (double)zaman.ElapsedTicks / Stopwatch.Frequency;
          Context.Response.Write("Oluşturulma Süresi : " + SaniyeSure.ToString("F4") + " saniye.");
        }
      };
    }
  }
}

Bu şekilde HttpModule’ü tanımladıktan sonra bu module’ün çalışması yani aktif olması için web.config dosyamızda tanımlanması gerekir. Bunun için de web.config dosyamızda gerekli yere aşağıdaki gibi ekleme yapıyoruz.

 
  <httpModules>
    .....
    <add name="ZamanModule" type="MehmetDuran.Zaman"/>
  </httpModules>

Web.config dosyasında module’lerimizi programatik olarak ekleyebilir ve yönetebiliriz. Bu şekilde sistemin yönetimi kolaylaşır. Ayrıca module’leri devre dışı bırakmak istersek bu şekilde bir kullanım yapmalıyız. Böylece yönetilebilir, detaylı bir sistem hazırlamış oluruz.

Bu kodların çalışır halini bloğumda (her sayfanın sol alt kısmında) görebilirsiniz.

İyi Çalışmalar.