Takvim
<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

JQuery kütüphanesi; web programlama için genel amaçlı ara bir katman oluşturur. Bu katman sayesinde neredeyse her türlü duruma uyan scriptler yazabiliriz. JQuery kütüphanesinin genişleyebilir bir yapısı vardır. Üzerine plug-in ler yazılabilir. İnternet üzerinde ve official sitesinde yazılmış plug-in lere kolayca ulaşabilirsiniz. Hatta kendi plug-in inizi bile yazabilirsiniz.

İşte JQuery' nin kabiliyetlerinden bazıları:

1. Sayfa Elemanlarına Ulaşım : JavaScript kütüphanesi olmadan DOM (Document Object Model) ağacı üzerinde veya HTML dökümanı üzerinde işlem yapmak için satırlarca kod yazmamız gerekir. JQuery tam da burada hızlı ve etkili bir çözümü olan "Seçiciler" (Selectors) mekanizmasını sunar. Seçiciler mekanizması ile HTML elementlerine hızlı ve kolay bir şekilde ulaşabiliriz.

2. Sayfa Görünümünü Değiştirme : CSS sayfa stilleme işinde inanılmaz ve güçlü metodlar sunar. Fakat tarayıcıların tüm standartları desteklemediği zamanlarda CSS de yetersiz kalır. CSS in yarattığı bu boşluğu JQuery, tüm tarayıcıların desteklediği standartlarıyla gayet güzel bir şekilde doldurur. Buna ek olarak, sayfamız render edildikten sonra JQuery ile CSS classlarını ve inline yazılmış style ları değiştirebiliriz.

3. Sayfa İçeriğini Değiştirme : JQuery nin sayfa üzerinde yapabildikleri sadece class ve style değiştirmekle sınırlı değil. JQuery ile bir kaç tuşla sayfamızda istediğimiz içeriği de değiştirebiliriz. Sayfamızdaki yazıları değiştirebiliriz. İstediğimiz yere yeni HTML elementleri insert edebiliriz, imajları değiştirebiliriz, elementlerimizin yerini değiştirebiliriz, hatta sayfamızdan eleman bile kaldırabiliriz.

4. Sayfa Animasyonları : Sayfamızdaki kontrollere fadeIn, fadeOut veya wipe efektleri verebiliriz.

5. Sayfa yenilemesi olmadan Sunucudan veri alma : Diğer bir deyişle AJAX (Asynchronous Javascript and XML) işlemleri yapabiliriz.

6. Genel JavaScript işlerini basitleştirme : Javacsript ile sıklıkla yaptığımız işleri (döngüler, dizi işlemleri vb.) daha basite indirger.

Bu saydığımız maddeler dışında tabiki onlarca özellik sayılabilir. JQuery denizine girdikçe görebileceğimiz bir çok özellik mevcut. Özellikle giriş bölümünde bahsettiğimiz plug-in olayı zaten başlı başına bir derya. Bu plug-in ler bizim hayal gücümüzle sınırlı sadece. Başka bir sınırı yok.

Şimdili bu kadar, diğer yazılarda görüşmek üzere

1 kişi tarafından 1.0 olarak değerlendirildi

  • Currently 1/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

JQuery bir JavaScript kütüphanesidir en kısa tanımıyla. Ancak başlıktaki sloganından da anlaşılabileceği gibi; az kodla çok iş yapmamıza yardımcı olan bir kütüphanedir. Aynı  zamada HTML dökümanı içerisinde istediğimiz gibi dolaşmamıza, form efektlerine, AJAX vb. işlemlere izin vererek hızlı kod geliştirme yapmamızı sağlar.

Kullanım Şekli:
Kullanımı gayet basittir. JQuery bir JS dosyasıdır. JS dosyalarını nasıl kod geliştirme ortamımıza include ediyorsak aynı şekilde JQuery dosyamızı kod geliştirme ortamımıza ekledikten sonra JQuery'nin nimetlerinden faydalanmaya başlayabiliriz.
Örnek : <script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script>

Nasıl Temin Edebilirim?
http://jquery.com/ adresinde JQuery nin son sürümünü ister Development, ister Production tipinde indirebilirsiniz.

Kullanıma başlamak bu kadar basit. Gelecek yazı serilerinde JQuery denizine dalıyor olacağız. 

Detaylı Bilgi için http://jquery.com/ adresini ziyaret edebilirsiniz.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Bir önceki yazımda ASP.NET State Management konusunun Client tarafındaki yönetim araçlarını incelemiştik. Bu yazımda ise Server taraflı yönetim araçlarına değiniyor olacağım.

Server taraflı ASP.NET durum yönetim seçenekleri, Client taraflı olanlara nazaran sayfa bilgilerimizi daha güvenli bir ortamda saklarlar. Ancak sunucu taraflı oldukları için tabiki sunucumuzun kaynaklarını kullanırlar.

ASP.NET in bize sunduğu Server taraflı State Management seçeneklerinden önemli olanları şöyledir;

  • Application State
  • Session State

Şimdi bu seçenekleri teker teker incelemeye çalışalım

Application State

Application State HttpApplicationState sınıfı üzerinden web uygulamalarımızda değerler saklamamıza imkan sağlar. Application state e web uygulamamızdaki tüm sayfalar ulaşabilir.  Application state key/value mantığıyla çalışır. Veriler uygulama bazında dictionary mantığıyla saklanır.

Kullanımı:
Application.Add("[Key]", ["Value"]);

Veri Alma işlemi:
string value = Application["Key"].ToString();

Bu yöntemi kullanmanın avanyajları:

  1. Kolay kullanım : key/value mantığıyla çalıştığı için kullanımı basittir
  2. Uygulama Alanı genişliği : Application state e web uygulamamızın tüm sayfaları erişebildiği için uygulama bazında yönetim sağlar

Dejavantajları:

  1. Uygulama Alanı genişliği : Uygulama alanı genişliği dikkatli kullanılmadığı takdirde bir dejavantaj olarak ta karşımıza çıkabilir. Şöyle ki : Uygulama bazındaki tüm sayfaların Application State e erişim hakkı olduğu için, bir sayfadaki kodun değiştirdiği Application State değeri, başka bir sayfadakiyle aynı olmayabilir. Dolayısıyla veri tutarsızlığına neden olabilir.
  2. Data devamlılığı limiti : Application state sunucumuz update olduğunda, yeniden başlatıldığında veya çöktüğünde kaybolacağı için Application state te tutulan veriler de kaybolacaktır
  3. Kaynak gereksinimi : Application state sunucu taraflı bir durum kontrol seçeneği olduğu için sunucumuzun kaynaklarını tüketecektir.

 

Session State

Session State yapısı da Application Satate e benzer. Ancak uygulama genelinde değil de o an uygulamamızı çalıştıran tarayıcı kapsamında veri tutmamıza olanak sağlar. Uygulamamızı çalıştıran her bir tarayıcının session değeri farklı olacaktır. Hatta aynı kullanıcı uygulamamızı çalıtırıp, daha sonra uygulamayı kapatıp tekrar uygulamamızı çalıştırsa yine session değerleri farklı olacaktır. Session State HttpSessionState sınıfının bir örneğidir. Application State gibi key/value yapısıyla çalışır. Session a eklenen veriler artık sunucu tarafından yönetilirler.

Kullanımı:
Session.Add("UserName", "Muammer"); //string türünde key alırken, object türünde value kabul eder. Bu da saklayabildiğimiz verilerin çok çeşitli olabileceği anlamına gelir.
//veya
Session["UserName"] = "Muammer";

Veri Alma İşlemi
string value = Session["UserName"].ToString();

Bu yöntemi kullanmanın avantajları:

  1. Kolay kullanım : key/value mantığıyla çalıştığı için kullanımı basittir
  2. Oturuma özel uygulama : her bir oturum için farklı değere sahip olduğu için uygulamamız tarafından Session değerlerinin yönetimi kolaydır.
  3. Veri bütünlülüğü : oturuma özel olduğu için IIS imiz restart olsa bile verilerimiz saklanmaya devam eder ve verilerimizi kaybetmeyiz.

Dezavantajları:

  1. Performans : Session değerleri sunucumuzun Ram inde saklandığı için performans açısından kullanırken dikkatli olmalıyız.

 

Bu iki makale ile ASP.NET State Management konusuna değinmeye çalıştık. Umarım yardımcı olabilmişimdir. Konu ile alakalı daha geniş bilgi sahibi olmak isteyenler MSDN in sayfasından daha geniş bilgi edinebilirler.

2 kişi tarafından 5.0 olarak değerlendirildi

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Web ortamında sayfaların her post-back olmasında ilgili sayfanın yeni bir örneği oluşturulur. Peki yeni bir örneğinin oluşması ne demek?

  1. Sayfamızdaki bilgilerin
  2. Sayfadaki kontrollerin (TextBox, Grid, CheckBox, Button vb.)

tamamen keybolması demektir. Örneğin kullanıcı sayfamızdaki bir TextBox a veri girdiğinde, artık biliyoruz ki bu veri tamamen kaybolacaktır. Ancak bunu deneyip yaptığımızda gerçek ortamda TextBox taki verinin kaybolmadığını görüyoruz.

Peki bu nasıl oluyor?

Geleneksel Web Programlamanın bu sınırlılığının üstesinden gelmek için .NET platformu bize bazı sayfa-tabanlı ve uygulama-tabanlı seçenekleri sunmakta. Bunlar:

  1. View State
  2. Control State
  3. Hidden Fields
  4. Cookies
  5. Query Strings
  6. Application State
  7. Session State 

Bu seçeneklerden (View State, Control State, Hidden Fields, Cookies ve Query Strings) sayfamızdaki bilgileri ve kontrol bilgileri bir takım yollarla kullanıcının kendi bilgisayarında (Client-Based State Manegement) saklarlar. Geri kalan seçenekler ise (Application State, Session State ve Profile Property) bu bilgileri uygulama tarafında yani sunucuda (Server-Based State Management) saklarlar.

.NET platformunun bizlere sunduğu bu seçenekleri incelersek:

View State

Post-Back sırasında default olarak sayfa ve kontrol bilgilerini tutan bu yapı, dictionary mantığıyla çalışır. Her bir kontrolün ve sayfa bilgisinin değerleri "Key", "Value" şeklinde, hidden field lar olarak korunur. sayfa sunucuya gönderildiğinde,gelen isteğe göre işlem yapıldıkran sonra sunucu view-state değerine göre sayfayı tekrardan render eder ve client a tekrar gönderir. Böylece sayfamızdaki verilerimizi kaybetmemiş ve sunucuya gitmeden önceki halleriyle tekrar tarayıcımızda görürüz.

View state yapısında kendi verilerimizide saklayabiliriz. Dictionar mantığıyla çalıştığını daha önce belirtmiştik. Aşağıdaki gibi basit bir şekilde View State yapısını kullanabilirsiniz

View State e veri ekleme:
ViewState.Add("[Key]","[Value]");

Eklenen bir veriyi alma:
ViewState["[Key]"].ToString();

Bu yöntemi kullanmanın avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Kolay uygulanabilirlik : Ekstra kodlama gerektirmez. Zaten default olarak kullanılan metoddur
  3. Güvenlik : View-State değerleri şifrelenmiş bir şekilde saklandıkları için Hidden field lara göre daha güvenlidirler

Dezavantajları:

  1. Performans düşüklüğü : View-State değerleri sayfamızla beraber sunucuya gittiği için view-state de büyük boyutta veri saklamak sunucuya gidiş-geliş süresini uzatacaktır. özellikle mobil uygulamalarda büyük veriler büyük performans kaybı demektir.
  2. Potansiyel Güvenlik Riski : Veriler şifrelenmiş bir şekilde saklansa bile sayfa kaynağını görüntülediğimizde bu verileri şifreli halde bile olsa görebiliriz. Bu durum güvenlik riski oluşturabilir.

Control State

.NET ControlState özelliği post-back ler arasında custom kontrol verilerini tutmamıza olanak sağlar. Örneğin sayfamızda farklı içerikler gösteren farklı tab yapılarımızın olduğunu düşünün. Hangi tabın seçili olduğunu post-back işleminden önce bilmek istiyorsak bu yapı uygun bir yapıdır. Bu senaryo ViewState ile de yapılabilir, ancak ViewState sayfa bazında kapatılabildiği için uygulamamızda aksaklıklara neden olabilir. ControlState ise ViewState gibi kapatılamaz.

peki nasıl kullanılır?

Veri ekleme:
PageStatePersister.ControlState = "[Data]";  //(veri object türünde eklenebilir)

Veri alma:
string value = PageStatePersister.ControlState.ToString();

Kullanım Avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Güvenilirlik : ViewState gibi kapatılamadığından kullanımı daha kesin sonuçlar verir.
  3. Çok Yönlülük : Control state tekli verilerin nasıl ve nerede saklanması konusunda custom adaptörler yazılabilir

Dezavantajları:

  1. Programlama bilgisi gerektirir : ASP.NET kullanım için limitli imkan sağlasa da, tam kullanım için kodlama gerektirmektedir.

Hidden Fields

Hemen hemen hepimizin bildiği bir state yönetim aracıdır. Normal bir HTML kontrolü olarak sayfamıza ekleyenilirsiniz. Veri saklama ve veri alma, normal bir TextBox tan farksızdır.

Kullanım avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Yaygın Destek : Hemen hemen tüm tarayıcılar hidden field desteği vermektedir.
  3. Kullanım kolaylığı : Standart HTML kontrolü olarak sayfanıza ekleyebilirsiniz.

Dezavantajları:

  1. Güvenlik Riski : Sayfa kaynağı direkt olarak görüntülenirse hidden field değerleri açıkça görülebilir. Değerler şifrelenebilir ancak şifrelenmesi ve şifrelerin tekrar çözülmesi işlemi ekstra kodlama demektir.
  2. Basit Depolama Mantığı : Hidden field larda rich değerler saklayamayız. Daha çok basit veriler saklanması için tasarlanmıştır.
  3. Performans Kaybı : Büyük veriler saklayamadığımız gibi, aşırı kullanımı durumunda sayfada HTML kontrolü olarak saklandığı için performans kayıplarına neden olacaktır

Cookies (Çerezler)

Uygulamamızda sıklıkla değişen verilerin Client taraflı saklanmasında en çok kullanılan state yönetim aracıdır. En çok karşımıza çıkan senaryosu ise bildiğimiz gibi Login işlemlerinde kullanıcıyı hatırlamaktır.

Kullanımı:

HttpCookie cookie = new HttpCookie("myCookie");
cookie.Values.Add("UserName", UserName);
cookie.Values.Add("Password", Password);
cookie.Expires = DateTime.Now.AddDays(30); //Cookie nin zaman aşımına uğrama süresi
Response.Cookies.Add(cookie);

Veri Okuma:

if (Request.Cookies["myCookie"] != null)
{
string UserName = Request.Cookies["myCookie"].Values["UserName"].ToString();
string Pwd = Request.Cookies["myCookie"].Values["Password"].ToString();
}

Kullanım Avantajları:

  1. Konfigüre Edilebilme : Cookie lerin ayarlanabilir birçok özelliği vardır. isim, değer, zaman aşımı süresi vb.
  2. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  3. Veri Devamlılığı : Client bilgisayarlarda veri bütünlülüğünü en yüksek oranda garanti edebilen yapılardır.
  4. Kullanım kolaylığı : text tabanlı key-value mantığıyla çalışırlar

Dezavantajları :

  1. Boyut limiti : Bir çok browser cookie boyutu olarak 4096 byte sınırını getirmektedir.
  2. Kullanıcı Kontrolü : Bazı kullanıcılar cookie alımını tarayıcılarından kapatabilirler, bu da cookie kullanımını olanaksız hale getirir
  3. Güvenlik Riski : Cookie kullanıcılar tarafından görülebilmektedir. Bu da güvenlik açıklarına neden olabilir. Cookie değerleri manuel olarak şifrelenebilir, ancak bu da ekstra kod demektir

Query Strings

Query String lerde yine en çok aşina olduğumuz state yönetim araçlarındandır. URL lerin ardına eklenen kullanıcılar için çok da bir anlam ifade etmeyen, yazılımcılar için anlamlı bilgilerdir.

Örneğin : http://www.projegrubu.net/index.php?option=com_comprofiler&task=userProfile&user=142 adresindeki "?" işaretinden sonra gelen
"option", "task" ve "user" kelimeleri birer Query String anatarlarıdır. Bu anahtarlar kullanıcılar için fazla bir anlam ifade etmez ancak yazılımcılar için çok anlamlıdırlar.

 Kullanımı :

http://www.projegrubu.net/index.php?option=com_comprofiler

Her iki kullanımda aynı işi görmektedir.

Veri Alma:

if (Request["[Key]"] != null)
{
string value = Request["[Key]"].ToString();
}

 Kullanım Avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Yaygın Destek : Hemen hemen tüm tarayıcıların Query String iler veri taşıma desteği vardır.

Dezavantajları:

  1. Güvenlik Riski : Query String ile taşınan veriler clear text olarak tüm kullanacılar tarafından görülebilmektedir. Bu nedenle değerli veriler kesinlikle query string ile taşınmamalıdır. Bunun yerine Hidden field veya diğer yapılar kullanılabilir.
  2. Kapasite Limiti : Bazı tarayıcılar URL uzunluklarını en fazla 2083 karakter olarak sınırladıklarından istenilen uzunlukta veri taşınamıyor.

 

Böylece ASP.NET State (Durum) yönetiminin Client tarafındaki yapılarını incelemiş olduk. Umarım yardımcı olabilmişimdir. Diğer yazımda Server tarafındaki yapılara göz atıyor olacağız.

 

3 kişi tarafından 3.7 olarak değerlendirildi

  • Currently 3,666667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Daha önceki yazımda Data Access Application Blog' un genel yapısından ve projemize entegrasyonunun nasıl yapıldığından bahsetmiştim. Bu yazımda ise genel CRUD (Create, Read, Update, Delete) işlemlerine değineceğim.

Öncelikle Read işlemiyle başlayalım. Veri tabanından veri okurken genel olarak ya inline SQL cümlelerini kullanırız veya Stored Procedure leri kullanırız. Bu iki yöntemi kullanırken de her zaman tüm verileri çekemeyiz. Bazen parametre geçerek istediğimiz verileri almak isteyebiliriz. Bu durumları simüle eden kod parçalarına aşağıda görebilirsiniz. 

1. Read işlemi; 

//DataSet doldurma işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
GridView1.DataSource = db.ExecuteDataSet(CommandType.Text, "select * from [TableName]");
GridView1.DataBind();

//inline SQL cümlesine parametre geçerek veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("SELECT * FROM [TableName] WHERE [ColumnName]=@[ParamName]");
db.AddInParameter(cmd, "@AdminId", DbType.Int32, 5);
GridView1.DataSource = db.ExecuteDataSet(cmd);
GridView1.DataBind();


//Stored procedure ile veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
GridView1.DataSource = db.ExecuteDataSet(CommandType.StoredProcedure, "[sp_Name]");
GridView1.DataBind();

//Stored procedure e parametre geçerek veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetStoredProcCommand("[sp_Name]");
db.AddInParameter(cmd, "@[ParamName]", DbType.Int32, 5);
GridView1.DataSource = db.ExecuteDataSet(cmd);
GridView1.DataBind();

2. Create işlemi;

Create veya insert işlemi ihtiyacımıza göre değişiklik gösterdiği için genel olarak mantığı aşağıdaki gibidir;
//inline SQL cümlesine parametre geçerek insert işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("insert into [TableName]([ColumnName]) values(@[ParamName])");
db.AddInParameter(cmd, "@[ParamName]", DbType.String, "[Param value]");
db.ExecuteNonQuery(cmd);

//stored procedure e parametre geçerek insert işlemi yaptıktan sonra output parametremiz varsa aşağıdaki şekilde output parametremizin değerini alabiliriz
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetStoredProcCommand("[sp_Name]");
db.AddInParameter(cmd, "@[ParamName]", DbType.String, "[paramValue]");
db.AddOutParameter(cmd, "@[OutParamName]", DbType.Int32, 4);
db.ExecuteNonQuery(cmd);
lblMessage.Text = cmd.Parameters["@[OutParamName]"].Value.ToString();

3. Update işlemi;

//inline SQL cümlesine parametre geçerek update işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("update [TableName] set [ColumnName]=@[param1] WHERE [ColumnName]=@[param2]");
db.AddInParameter(cmd, "@[param1]", DbType.String, "[param1 value]");
db.AddInParameter(cmd, "@[param2]", DbType.Int32, [param2 value]);
db.ExecuteNonQuery(cmd);

4. Delete işlemi;

//inline SQL cümlesine parametre geçerek delete işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("delete from [TableName] WHERE [ColumnName]=@[param1]");
db.AddInParameter(cmd, "@[param1]", DbType.Int32, [param1 value]);
db.ExecuteNonQuery(cmd);

Genel CRUD işlmleri bu şekildedir. İhtiyacımıza göre bu yapıları esnetebiliriz tabiki. Umarım yardımcı olabilmişimdir.

Kolay gelsin.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Bu ve bundan sonraki birkeç yazımda Microsoft Enterprise Library 3.1 Bloglarını teker teker ele almaya çalışacağım. Daha önceki yazılarımda nedir ne değildir konusuna zaten değinmiştik. Burada öncelikle bir uygulamaya Data Access Application Blog nasıl eklenir? ve genel CRUD (Create, Read, Update, Delete) işlemleri nasıl yapılır? sorularına cevap arıyor olacağız.

Microsoft Enterprise Library 3.1 sürümünü kullanabilmeniz için sisteminizde ;

  • Visual Studio 2005 Professional Edition veya Visual Studio 2005 Team System Edition veya Visual Studio 2005 Standard Edition
  • .NET Framework 2.0
  • Microsoft SQL Server, Microsoft SQL Server CE veya Oracle veritabanı
  • kurulu olması gerekmektedir. Tabiki bir de Microsoft Enterprise Library 3.1 sürümünün kurulu olması gerektiğini, sanırım hatırlatmama bile gerek yok.

     Var olan bir .NET 2.0 uygulamamıza Data Access Application Blog' u nasıl ekleyebiliriz?

    1. Öncelikle Başlat' tan Enterprise Library Configuration aracımızı çalıştırıyoruz

              

         2.  Daha sonra File menüsünden "Open Application" menüsünü seçip Data Access Application Blog' u eklemek istediğimiz uygulamamızın Web.config dosyasını buluyoruz ve açıyoruz.
         3.  Açmış olduğumuz uygulamamız üzerine sağ tıklayıp "New" menüsünden Data Access Application Blog' u seçiyoruz

              

          4. Data Access Application Blog' umuzu ekledikten sonra sıra geldi ayarlarını yapmaya.

             

             Gördüğünüz gibi "Connection String" bölümü altında bağlantı cümlemizi verebileceğimiz bir alan mevcut. Burada verdiğimiz bağlantı cümlesi uygulamamızın Web.config inde <connectionStrings></connectionStrings> tagları arasına eklenecektir.

             Burada ayrıca Application Settings altında uygulama genelinde kullanabileceğimiz "Name" - "Value" ilişkisinde yapılar da tanımlayabiliriz.

             Ayarlarımızı yaptıktan sonra projemizi kaydediyoruz ve uygulamamızın Web.config ine baktığımız zaman verdiğimiz ayarları ve bunun dışında da bir takım ayarlamaların otomatik olarak yapıldığını görebiliriz.

    Data Access Application Blog' u uygulamamızda kullanabilmek için gereken ayarlamaları yaptık. Data Access Application Blog' u kullanabilmemiz için son olarak ta uygulamamızın referanslarına Microsoft.Practices.EnterpriseLibrary.Data.dll ini ve Microsoft.Practices.EnterpriseLibrary.Common.dll ini eklememiz gerekiyor. Bu iki dll i Microsoft Enterprise Library 3.1 in sisteminizde kurulu olduğu klasör içerisinde bulabilirsini. Eğer farklı bir yere kurmadıysanız sisteminizde "C:\Program Files\Microsoft Enterprise Library 3.1 - May 2007\Bin" klasöründen ulaşabilirsiniz.

       Yazımın diğer bölümünde genel CRUD işlemlerine değineceğim.

    Kolay gelsin.

    Bu yazıyı ilk değerlendiren siz olun

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    AJAX Tab Control görünüm olarak yeterli bence, ancak bazı durumlarda ihtiyaçlarımızı karşılamayabilir. İhtiyaçlarımızı karşılamadığı durumlarda tabiki kendi stillerimizi kontrole uygulayarak istediğimiz görünümü sağlayabiliriz. Bunun için CSS in nimetlerinden faydalanacağız.

    Bu adresten CSS class detaylarına ulaşabilirsiniz. Bu CSS sınıflarını aşağıda kısaca açıkalayacağım;

    CSS class larınındaki outher, inner ve tab kelimelerini aşağıdaki gibi simüle edebiliriz. Aşağıdaki resmi Tab kontrolünün bir tab' ı şeklinde düşünebilirsiniz.

  • .ajax__tab_header: TabContainer ın en üstünde ve diğer tabları içine alan kontroldür.
  • .ajax__tab_outer: Tab ın sol taraf arka plan resmini veya CSS ini ayarlamamızı sağlayan elementtir.
  • .ajax__tab_inner: Tab ın sağ taraf arka plan resmini veya CSS ini ayarlamamızı sağlayan elementtir.
  • .ajax__tab_tab: Tab ın Text içeriğini tutan ve CSS ini ayarlamamızı sağlayan elementtir.
  • .ajax__tab_body: TabPanel içeriğini tutan ve CSS ini ayarlamamızı sağlayan elementtir.
  • .ajax__tab_hover . Mouse ile üzerine gelinen tab ın CSS ini ayarlamamızı sağlayan elementtir.
  • .ajax__tab_active: Aktif olan tab ın CSS ini ayarlamamızı sağlayan elementtir.
  • header, inner ve tab  kelimelerinin hiyerarşik yapısı da aşağıdaki gibidir.

    <span id="..." class="ajax__tab_active"> 
       <span class="ajax__tab_outer"> 
         <span class="ajax__tab_inner"> 
           <span id="..." class="ajax__tab_tab">Tab Text</span
        </span>
       </span>
    </span>

     Bu kısa bilgiden sonra aşağıdaki örnek üygulamada gösterildiği gibi CSS class larını TabControl e uygulayabiliriz. Aşağıdaki örnek uygulama için ilgili imajları da almanız gerekmektedir.

    İmajlar:

    Örnek Kodlar:

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

    <title>Untitled Page</title>

    <style type="text/css">

     

    .mumy .ajax__tab_body {

    font-family:verdana,tahoma,helvetica;

    font-size:10pt;

    border:1px solid #999999;

    border-top:0;

    padding:8px;

    background-color:#ffffff;

    }

     

    .mumy .ajax__tab_header {

    font-family:verdana,tahoma,helvetica;

    border-bottom:1px solid #999999;font-size:14px;

    }

    .mumy .ajax__tab_inner{

    background:url(images/left_Off.gif) no-repeat;

    padding-left:9px;

    padding-right:9px;

    }

     

    .mumy .ajax__tab_tab{

    background:url(images/mid_Off.gif) repeat-x;

    padding:7px 5px;margin:0;

    }

    .mumy .ajax__tab_outer{

    background:url(images/right_Off.gif) no-repeat right;

    height:30px;

    padding:0px 0px 0px 0px;

    }

    .mumy .ajax__tab_hover .ajax__tab_outer{ background:url(images/right_On.gif) no-repeat right;

    }

    .mumy .ajax__tab_hover .ajax__tab_inner{

    background:url(images/left_On.gif) no-repeat;

    }

    .mumy .ajax__tab_hover .ajax__tab_tab{ background:url(images/mid_On.gif) repeat-x;

    }

    .mumy .ajax__tab_active .ajax__tab_outer {

    background:url(images/right_On.gif) no-repeat right;

    }

    .mumy .ajax__tab_active .ajax__tab_inner { background:url(images/left_On.gif) no-repeat;

    }

    .mumy .ajax__tab_active .ajax__tab_tab {

    background:url(images/mid_On.gif) repeat-x;

    }

    </style> </head>

    <body>

    <form id="form1" runat="server">

    <div>

    <asp:ScriptManager ID="ScriptManager1" runat="server">

    </asp:ScriptManager>

    </div>

    <cc1:TabContainer ID="TabContainer1" runat="server" Height="500" CssClass="mumy">

    <cc1:TabPanel ID="tbMission" runat="server">

    <HeaderTemplate>

    <table border="0" cellpadding="0" cellspacing="0">

    <tr>

    <td width="25"><img src="images/icon1.png" width="15" height="15"/></td>

    <td><a>1. tab tab tab</a></td>

    </tr>

    </table>

    </HeaderTemplate>

    <ContentTemplate>

    1. tab içeriği<br />

    </ContentTemplate>

    </cc1:TabPanel>

    <cc1:TabPanel ID="TabPanel1" runat="server">

    <HeaderTemplate>

    <table border="0" cellpadding="0" cellspacing="0">

    <tr>

    <td width="25"><img src="images/icon1.png" width="15" height="15"/></td>

    <td><a>2. Tab</a></td>

    </tr>

    </table>

    </HeaderTemplate>

    <ContentTemplate>

    2. tab içeriği<br />

    </ContentTemplate>

    </cc1:TabPanel>

    <cc1:TabPanel ID="TabPanel2" runat="server">

    <HeaderTemplate>

    <table border="0" cellpadding="0" cellspacing="0">

    <tr>

    <td width="25"><img src="images/icon1.png"/ width="15" height="15"></td>

    <td><a>3. Tab</a></td>

    </tr>

    </table>

    </HeaderTemplate>

    <ContentTemplate>

    3. tab içeriği<br />

    </ContentTemplate>

    </cc1:TabPanel>

    </cc1:TabContainer>

    </form> </body>

    </html>

    Uygulamamızın son hali aşağıda göründüğü gibi olacaktır:

            

    3 kişi tarafından 2.7 olarak değerlendirildi

    • Currently 2,666667/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    ASP.NET uygulamalarında MasterPage ler yazılımcılara kesinlikle büyük kolaylık sağlıyor. Ancak bazı durumlarda sayfamızın MasterPage ini durumun gerektirdiği şekilde dinamik olarak yüklememiz gerekebilir.

    Bu gibi durumlarda sayfamızın MasterPage ini set veya get edebileceğimiz aşağıdaki property i kullanabiliriz.

    Ancak bu property i kullanabilmemiz için;
    1. (Aslında söyleme gereği yok ancak...) sayfamızın hali hazırda bir MasterPage inin olması gerekiyor.
    2. MasterPage imizi değiştirmemizi sağlayan property Page_PreInit sayfanın eventinde çalışabiliyor.

    yani;

    şeklinde çalışma zamanında sayfamızın MasterPage ini değiştirebiliriz.

    1 kişi tarafından 4.0 olarak değerlendirildi

    • Currently 4/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    Bir web sitesinin (e-ticaret, portal, forum vb.) hayat damarlarından biri arama motoru sonuçlarında baş sıralarda çıkmaktır. Tabi ilk sırada olması çok daha tercih sebebidir. Bunun iki önemli nedeni var bence

    1. BEDAVA
    2. Hedefe yönelik sonuç vermesi. İnsanlar genelde merak ettikleri konuları veya ihtiyaç duydukları şeyleri aramak için arama motorlarını kullanırlar.

    Hal böyle olunca web sitemizin arama sonuçlarında üst sıralarda çıkması için bir takım teknik, metod ve stratejileri izlememiz zorunlu hale geliyor. Bunlardan basit ama etkili olan 5 tane tekniği ele alalım:

    1. Meta Tag leri : Meta tag lerini duymayan hatta kullanmayan yoktur sanırım. Ancak bu tag leri kullanırken bile bazı kurallara uymak yararımıza olacaktır. Örneğin "title" ve "description" tagleri kullanmak çok ama çok etkili olabilir. Bunun yerine "keywords" tagini kullanmak artık eskisi kadar etkili değil. Çünkü çoğu arama motoru artık dikkate almıyor. Sitenizdeki anahtar kelimeleri   "title" ve "description" taglerinde kullanmak iyi bir başlangıç olabilir. Ancak bu tagler de "and", "or", "the" gibi kelimeleri de kullanmamamız lehimize olacaktır.

    2. Link ve JavaScript yerleşimi : Sitedeki linklerinizi veya JavaScriptlerinizi sitenizin sol tarafına veya sayfanın üst tarafına koymayın. Çünkü arama motoru bot ları sayfayı okurken sol üstten ilk 100 kelimeyi daha çok dikkate alırlar. Sayfayı okurken sol üstten başlarlar ve soldan sağa doğru devam ederler.

    3. Resimlerde "alt" veya "title" tag lerini kullanın : Arama motoru bot larının resimleri okuma becerisi henüz yok. Bu yüzden sayfamızdaki bir resmin ne olduğunu arama motorlarına anlatmanın en etkili yolu bu iki tag i kullanmaktır.

    4. Sitenizin içeriğini güncel tutun : Arama motorları sayfaları indekslerken, bir önceki indeksledikleriyle aynı içeriği bulduklarında sayfanızı es geçebilirler ve sıralama listesindeki sıranız gerilere düşebilir. Sayfaların içeriğini güncel tutmak lehimize olacaktır.

    5. Site içeriği ve domain isminiz örtüşsün : Arama motorlarının indeksleme yaparken en çok kullandıkları kriterlerden biride domain ismidir. Sitede geçen kelimeler veya içerikle domain ismimizin örtüşmesi inanılmaz bir yarar sağlayacaktır. 

    2 kişi tarafından 3.0 olarak değerlendirildi

    • Currently 3/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    Uygulamalarımızda kullandığımız her tipin veya tipteki üyelerin birer erişilebilirlik seviyesi vardır. Bu erişilebilirlik seviyelerini;

    1.      public
    2.     
    private
    3.     
    protected
    4.     
    internal
    5.      protected internal
     olarak sıralayabiliriz.  

    Bu seviyeleri kısaca açıklarsak
    1.      public : Bu seviyede tanımlanmış tip veya tip üyelerimize, aynı assembly veya bu assemblyi referans alan başk bir assembly nin her hangibir yerinden erişilebilir.
    2.      private : Bu seviyede tanımlanmış tip veya tip üyelerimize, sadece tanımlandığı yapı veya sınıf içerisinden erişilebilir
    3.      protected : Bu seviyede tanımlanmış tip veya tip üyelerimize, aynı sınıf, yapı veya bu sınıftan türemiş başka sınıf üzerinden erişilebilir.
    4.      internal : Bu seviyede tanımlanmış tip veya tip üyelerimize, sadece aynı assembly üzerinden erişilebilir. Bu assemblyi referans alan başka bir assembly üzerinden erişilemez.
    5.      protected internal : Bu seviyede tanımlanmış tip veya tip üyelerimize ise, tanımlandıkları kod bloğundan, aynı assembly den veya bu sınıftan türemiş başka bir assembly deki sınıftan erişilebilir. 

    Enum, class, interface ve struct olarak tanımladığımız tip üyelerinin default olarak belirlenmiş erişilebilirlik seviyeleri vardır. Bunlardan; 

    Enum olarak tanımlamış üyelerin default erişilebilirlik seviyesi public tir. Ve uygulama dahilinde izin verilen erişim seviyesi sadece public tir.
    Sınıflar default olarak private olarak tanımlanırlar. İzin verilen seviyeler ise;public, private, protected, internal, protected internal dır.
    Arayüzler olarak tanımlamış üyelerin default erişilebilirlik seviyesi public tir. Ve uygulama dahilinde izin verilen erişim seviyesi sadece public tir. 

    Daha geniş bilgi edinmek isteyenler aşağıdaki adresleri ziyaret edebilirler
    http://msdn.microsoft.com/en-us/library/ms173121.aspx
    http://csharpfeeds.com/post/6962/Knowing_the_Default_Access_Modifiers_in_Csharp

    http://www.vijaymukhi.com/documents/books/csbasics/chap8.htm

    http://www.programlama.com/sys/c2html/view.php?DocID=1967

    Bu yazıyı ilk değerlendiren siz olun

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    muammerhallac , Tarih : 14. Ağustos 2008, 15:19

    Bilindiği üzere C# çoklu kalıtımı desteklemiyor. Bu nedenle bu eksikliği gidermek amacıyla Arayüz alt yapısı geliştirilmiştir.  Arayüzlerin en belirgin özelliği soyut klaslarda olduğu gibi metod bildirimleri içermesidir. Metod bildirimlerinin yanı sıra bir arayüz ;

    1. Event
    2. Property
    3. Indexer

    gibi yapıların bildirimlerini de içerebilir. Ancak soyut klaslarda olduğu gibi bu yapıların implemente edilmiş hallerini içeremezler. Sadece bu saydığımız 4 yapının bildirimlerini içerebilirler. Diğer bir deyişle bu yapıların implementasyonları  klaslar veya diğer yapılar içerisinde yapılmalıdır. Kısaca Arayüzler, kendisini uygulayan sınıflara rehberlik etmek üzere bir takım bildirimleri barındırırlar.

    Peki neden Arayüzleri kullanmalıyız?
    Bu soruyu bir örnekle açıklarsak sanırım daha iyi olur. Örneğin bir web sitemiz var ve verilerimizi XML dosyalarından okuyor ve XML dosyalarına yazıyoruz. Veri okumak için ise XmlReader kullanıyoruz. Oysa ki bir süre sonra XML ihtiyaçlarımızı artık karşılayamaz oldu ve bir veri tabanı kullanmaya karar verdik. Bu noktada kullandığımız XMLReader başımızı ağrıtabilir. Çünkü veri tabanından veri okurken işimize yaramayacaktır artık. Bunun yerine verileri okurken IDataReader arayüzünü kullanmış olsaydık daha az kod değiştirerek sonuca hızlıca ulaşabilirdik.

    Gelelim arayüzlerin nasıl kullanıldıklarına. Örnek bir senaryo üzerinden gidersek; senaryomuz gereği iki tana arayüz tanımlayalım. Bunlarsan biri 4 işlem fonksiyonlarını yerine getirsin. Diğeri ise bu arayüzün ürettiği sonucu bize bildirsin. Arayüzlerimizi aşağıdaki şekilde tanımlıyoruz.

     

    Arayüzlerimizi tanımladıktan sonra bu arayüzleri uygulayacak olan sınıfımızı tanımlıyoruz.


    Eklediğimiz sınıfa oluşturmuş olduğumuz arayüzleri implemente ettiğimizde Visual Studio bize hemen yardımcı olarak söz konusu arayüzlerin içerisindeki bildirimleri oluşturuyor. Arayüzlerimizdeki bildirimleri oluşturduğumuz zaman aşağıdaki gibi bir kod bloğumuzun olması gerekiyor.

     

    Görüldüğü üzere sınıfımızda implemente ettiğimiz arayüzlerin bildirimleri oluşturuldu. Sınıfımızı da oluşturduğumuza göre sıra geldi sonucu görmeye.

    Ben bir ASP.NET uygulamasında sonucu yazdırmıştım, ihtiyaca göre istenilen yerde işlem yapılabilir.

     Yüzeysel olarak arayüzlerin ne olduğundan ve çok basit olarak nasıl kullanıldığından böylece bahsetmiş olduk. Daha detaylı bilgi edinmek isteyenler aşağıdaki linkleri takip edebilirler.

    1. http://www.codersource.net/csharp_tutorial_interface.html
    2. http://msdn.microsoft.com/en-us/library/87d83y5b.aspx
    3. http://www.codeguru.com/csharp/csharp/cs_syntax/interfaces/article.php/c7563#more
    4. http://www.codeproject.com/KB/cs/cs_interfaces.aspx
    5. http://aspalliance.com/1516_Understanding_Interfaces_in_C.1
    6. bir de tabiki http://www.google.com.tr :)

    2 kişi tarafından 5.0 olarak değerlendirildi

    • Currently 5/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

        GirdView ın bulunduğu aspx sayfamızın source kısmına aşağıdaki JavaScript kodunu ekliyoruz 

    function DeleteText(ctrl)
    {
    document.getElementById(ctrl).innerText=
    "";
    }

    daha sonra GridView ın RowDataBound eventine

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
       if (e.Row.RowType != DataControlRowType.Header && e.Row.RowType != DataControlRowType.Footer)
       {
         TextBox txt = new TextBox();
         txt = (
    TextBox)e.Row.FindControl("TextBox1");
         txt.Attributes.Add(
    "onfocus", "DeleteText('"+txt.ClientID+"')");
       }
    }

    kodunu ekledikten sonra gridview da herhangibir satırdaki TextBox a tıkladığımızda içerisinde bulunan değer kaybolmuş olacak.

     

    veya

    Çok kısa bir çözüm daha

    <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" onfocus="if(this.value=='hede hödö') {this.value=''};" ></asp:TextBox>

    Bu yazıyı ilk değerlendiren siz olun

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5

    GridView içerisinde tıkladığımız satırda istediğimiz kolona ulaşmak için;

    GridView a bir detay butonu ekleyelim ve CommandName özelliğine [birisim] verelim. Daha sonra da GridView ın  RowCommand eventine aşağıdaki kodu ekleyelim

    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
    if (e.CommandName == "[birisim]")
    {
        Response.Write(GridView1.Rows[Convert.ToInt32(e.CommandArgument.ToString())].Cells[3].Text.ToString());
    }
    }

    şeklinde tıklanan satırın istenilen kolonuna erişmiş oluruz

    Bu yazıyı ilk değerlendiren siz olun

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5
    muammerhallac , Tarih : 1. Ağustos 2008, 15:03

    Şu an kendi bloğumda da kullandığım;

    I- Herhangi bir kurulum aşamasına gerek duymadan, birkaç saniye içerisinde kullanmaya başlayabileceğiniz
    II- Herhangi bir veritabanı sistemi ile ilişkilendirmek zorunda olmadığınız (isteğe bağlı olarak SQL Server kullanabilirsiniz)
    III- ASP.NET tabanlı olan
    IV- Açık kaynak kod olarak geliştirilebilen,
    V- Her geçen gün büyüyen tema ve eklenti desteği olan,
    VI- BlogEngine.NET TR ekibi tarafından geliştirilen Türkçe içeriği ve Türkçe desteği olan
    VII- Geniş destek ve yardım ağı olan

    gibi birtakım özellikleri olan BlogEngine artık türkçe...

    BlogEngine.NET TR ekibine çok ama çok teşekkür ediyorum. Kullanmak veya denemek isteyenler http://www.blogenginetr.com/  adresinden kaynak dosyalara, kurulum ve daha bir çok konuya ulaşabilirler.

     

    Bu yazıyı ilk değerlendiren siz olun

    • Currently 0/5 Stars.
    • 1
    • 2
    • 3
    • 4
    • 5