MVC Data Annotions’lar Ve Açıklamarıyla Bol Örnekler

MVC’de en çok kullanılan kavramlardan biride hiç şüphesiz Attribute’ler olmaktadır bu makalemizde Data Annotions namespace’i altında yer alan Attribute’leri göreceğiz

MVC’de Data Annotions’lar ve açıklamarıyla bol örnekler

DataAnnotions Attribute’lerini kullanmak için alttaki namespace’leri ekleyin.

AttributeAçıklama
KeyAlanın birincil anahtar olduğu belirtilir ve veritabanı oluşturulurken otomatik artan sayı olarak ayarlanır.
RequiredAlanın zorunlu olduğu belirtilir
ColumnAlanın veritabanındaki alanı ile ilgili ayarları belirtilir örnek veritabanında oluşacak olan alanadı(Name), tür adı(TypeName) veya Order(Sira – Çoklu Key kullanımında kullanılır)
DataTypeAlanın veritürü belirtili örnek DataType’lar şu şekildedir. Date,Time,Currency,EmailAdress,Password v.b
HiddenInputAlanın sayfada gösterilmemesini sağlar ama veri server’a gönderilir sadece kullanıcıdan gizlenir.
ReadOnlyAlanın sadece okunabilir özelliğine sahip olması için kullanılır.
DisplayFormatSayfaya bastırılacak fotmat bilgisi belirlenir genellikle Tarih, Saat, Sayı formatlama gibi durumlarda kullanılır.
TableVeritabanında oluşacak tablonun adı(Name) veya Şema(Schema)’sı belirtilir.
StringLengthGirilecek karakter sayısını sınırlamada kullanılır.
RegularExpressionRegex neredeyse tüm programlama dillerinde kullanılan bir doğrulama desenidir.
RangeSayısal değerler için aralık belirtmede kullanılır.
RemoteKaydın varolup olmadığını kontrol etme örnek sayfa yenilemeden girilen kullanıcı adının var olup olmadığını kontrol etme.
CompareKarşılaştırma yapmak için kullanılır örnek girilen ili şifrenin aynı olup olmamasını karşılaştırma.
ScaffoldColumnDüzenlenmesini istemediğimiz model özelliği için kullanılır. Böylece bu alan EditorForModel kullandığımızda gizlenecektir. Örneğin, modelin id sini kendimiz belirlemiyoruz. Bu özelliği veritabanına bırakıyoruz. Dolayısıyla bu alan için ScaffoldColumn niteliği kullanabiliriz.

Sırasıyla üstteki tabloda yer alan attribute’lerimizi açıklamaya çalışalım

Key

Üstteki kodda Id alanının primary key(birincil anahtar) özelliğine sahip olduğunu belirtiyoruz böylece oluşturulacak veri tabanında bu alan otomatik olarka birincil anahtar olacak ve otomatik artan sayı olarak ayarlanacaktır.

Sırasıyla üstteki tabloda yer alan attribute’lerimizi açıklamaya çalışalım

Required

Üstteki şekilde bir tanımlama sonucunda Kategori alanının boş geçilemeyeceğini belirtiyoruz ve boş geçildiği taktirde Kategori alanı gereklidir şeklinde bir uyarı çıkacaktır. alttaki gibi

Eğer ErrorMessage tanımlamasakdık otomatik olarak şöyle bir cümle tanımlanmış ve gösterilmiş olacaktı “The Ad field is required.” null veya boş değer girilmeye çalışıldığında bu hata ile karşılaşmanız olasıdır.

ReadOnly

Bu niteliği kullandığımız özellik değiştirelemez, sadece görüntülenir. Kullanımı;

DisplayFormat

Model özelliğini formatlı göstermek için kullanabiliriz. Örneğin;

Şeklinde bir kullanımda, bu alanın çıktısı şöyle olacaktır:

12.50 TL

ApplyFormatInEditMode özelliği varsayılan olarak false dur. Eğer bu formatlı görüntünün input içerisinde de görünmesini istiyorsak true yaparız.

Şimdi ise DogumTarihini dd/MM/yyyy formatında yazdıralım eğer format belirtmezsek dd/MM/yyyy hh:mm:nn formatında uzunca gereksiz rakamlar çıkacaktır.

Tarih için üstteki formatı kullanırsanız çıktı şu şekilde olacaktır.

02-08-2014

NullDisplayText özelliğini kullanarak NULL dönen sonuçlar yerine bir not gösterilmesini sağlayabilirsiniz.

StringLength

Bu nitelik ile girilecek değerin karakter uzunluğunu belirleriz. Bu tanımlama ile aynı zamanda Code First geliştirmede veritabanın oluşturulacak alan içinde, bu string uzunluğu tanımlanacaktır.

Eğer bu nitelik için maksimum karakter uzunluğu belirlenmezse, doğrulama işleminin yanı sıra veritabanı tablosundaki bu alan için nvarchar(MAX) şeklinde bir veri tipi oluşturulacaktır. Örneğin kategori sınıfı için;

şeklinde bir tanımlama yaptığımızda, 50 karakterden fazla bir girdi yazarsak alacağımız mesaj;

gibi olacaktır. Ayrıca veritabanı tablosundaki ad alanının görüntüsüde aşağıdaki gibidir.

MinimumLength özelliğide isteğe bağlıdır. Bu özellik StringLength nitaliğine bağlı bir özelliktir. Kullanımıda aşağıdaki gibidir.

RegularExpression

Regex tüm dillerde olan bir string doğrulama desenidir. MVC de de regex için bir nitelik (attribute) vardır. Regex girilen string değerin, bizim belirlediğimiz bir kurala göre olup olmadıgını belirlemek amaçlı kullanılır.

Aslında bir mail adresinin gerçek olup olmadığı o adrese mail atıp cevap gelene kadar beklemeden anlaşılmaz. Ama en azından belli bir e-posta deseni vardır. @ sembolune kadar olan kısım kullanıcı kimligi, bu sembolden sonra, mail sirketinin kimliği, daha sonra bir nokta ve bir uzantı.

E-posta adresinin regex deseni [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,4} şeklindedir. Bunu sınıfımızın özelliği için nitelik olarak belirlemek için;

şeklinde kullanırız. Böylece MVC kullanıcı girdisinin bu desene uyup uymadıgını kontrol eder. Ve önceki örneklerimizde olduğu gibi bir hata mesajı verir. Tabi aslında Email için direk yazılmış nitalik var. Bunlara de deyineceğiz.

Remote

Bu nitelik sayısal değerler için aralık belirlemek için kullanılır. Örneğin bir yaş aralığı için; Bu nitelik, sunucu taraflı bir çağrı ile istemci taraflı bir doğrulama yapmak amacıyla kullanılır. Yani; örneğin, KullaniciAdi var mı yok mu diye, kontrol etmek için veritabanına gitmek gerekli. Bunu yaparken ise istemci taraflı bir doğrulama yapmak için bu niteliği kullanabiliriz. Örneğin kategori ismi için, aynı kategoriyi tekrar girilmesini istemiyorsak, kategori sınıfımızdaki Ad alanını Remote ekliyoruz;

Daha sonra KategoriController sınıfına aşağıdaki metodu ekliyoruz.

Kategori eğer sistemde varsa, sayfa yenilemesi olmadan bu karşılaştırma yapılarak, hata mesajı verecektir. Hata mesajı aşağıdaki gibidir.

Range

Range attribute’ünü özellikle yaş gibi bu durumlarda kullanabilirsiniz mesela projenizde kayıt işleminde yaş aralığı 18-65 arasındaki kişileri kabul ediyorsanız aşağıdaki gibi bir rande kullanımı tam ihtiyacınızı karşılayacaktır.

Eğer iki tarih aralığında bir tarih girilmesini istersek o zaman aşağıdaki gibi bir yazım ile ihtiyacımızı karşılayabiliriz.

Üstteki kodda yapılmak istenen çok basit DateTime türünde 01/01/2000 ile 01/01/2010 tarihleri arasındaki bir tarih girdirilmesini sağlayabiliriz kolaylıkla.

Compare

Bu nitelik ile örneğin kullanıcı şifresini tekrar girmesini istedigimizde bu iki şifre karşılaştırılır. Örnek kullanımı;

şeklinde bir tanımlama yaparsak, iki textbox içine girilen değerler otomatik olarak karşılaştırılır.

ScaffoldColumn

Düzenlenmesini istemediğimiz model özelliği için kullanılır. Böylece bu alan EditorForModel kullandığımızda gizlenecektir. Örneğin, modelin id sini kendimiz belirlemiyoruz. Bu özelliği veritabanına bırakıyoruz. Dolayısıyla bu alan için ScaffoldColumn niteliği kullanabiliriz. Örnek kullanımı;

Bunlar da hoşunuza gidebilir...

5 Cevaplar

  1. Ergün dedi ki:

    Teşekkürler hocam örneklerle beraber çok açıklayıcı olmuş.

  2. ali dedi ki:

    sağolasın çok işime yaradı

  3. ali dedi ki:

    sağol

Bir Cevap Yazın