|
Asp.Net MVC Framework - Validation İşlemleri - II

Yazar:
Turhal Temizer
Kategori:
ASP.NET
Eklenme Tarihi:
07.09.2009 05:57:25
Bu yazımızda Validation işlemlerini IDataErrorInfo arayüzünden yararlanarak nasıl uygulayabileceğimizi incelemeye çalışıyoruz.
Günler geçtikçe ASP.NET MVC Framework hem ülkemizde hem de dünyada yayılmaya devam etmektedir. Geliştirdiğimiz web projelerinin geliştiriciler
tarafında hızlı geliştirilebilmesine sağladığı olanaklar ve çalışma zamanındaki
performansı ile tercih sebebi olma yolunda emin adımlarla ilerlemektedir.
Ayrıca MVC kalıbını yıllardır web kullanıcıları kullanıyordu. Ancak ASP.NET
MVC Framework ile birlikte gelen hazır özelliklerin bir çoğunu kendimiz
oluşturmak durumunda kalıyorduk. Bu da bize MVC Framework ile
geliştirdiğimiz uygulamaların geliştirilebilirliğinin daha da kolay
olduğunun ufak bir göstergesidir.
ASP.NET MVC Framework ile
yapılabilecekleri ufak örnekler yardımı ile bir süredir inceliyoruz. Bu
sefer ise bir önceki yazımızda incelemiş olduğumuz Validation kontrollerini
devam yazısı ile incelemeye devam ediyoruz. Bu yazımızda
ModelState.AddModelError() ile yapmış olduğumuz hata kontrolünü
kendi hazırlayacak olduğumuz sınıf yardımı ile nasıl yapabileceğimizi
incelemeye çalışacağız.
Validation kontrolünü yine bir örnek ile
inceleyelim ve veri tabanında ders tablosu oluşturalım.

Tabloyu oluşturduktan sonra bir MVC projesi oluşturacağız. Sonrasında ise
projeye Entity Framework özelliklerinden yararlanmak için Entity Data Model
ekleyeceğiz.

Not: Entity Model ile çalışırken unutulmaması gereken en
önemli noktalardan biri model üzerine eklemiş olduğumuz tablo objelerinin
isimlerinin veri tabanı ile aynı olmamasıdır. Bu sebepte veri modeline
attıktan sonra ismini değiştiriyoruz. Bu açıkladığımız konuları uygularken
zorluk yaşıyorsanız daha önce yayınlamış olan ilişkisel yazıları
okuyabilirsiniz.
Temel işlemleri yapmaya devam ediyoruz.
Diğer yazılarımızda da sıklıkça değindiğimiz verilerin getirilmesi ve yeni
bir kayıt oluşturulması durumunda gerçekleşecek işlemleri sağlayacak
metotları hazırlayalım. İş katmanı Controller olduğuna göre ve bu işleri ana
sayfa üzerinde hazırlayacağımıza göre HomeController
içerisinde bahsettiğimiz işlemleri gerçekleştiriyoruz.
using System.Linq; using System.Web.Mvc; using
ValidationIslemler.Models;
namespace ValidationIslemler.Controllers
{ [HandleError]
public class HomeController : Controller {
private MVCArticleEntities _db = new MVCArticleEntities();
public ActionResult Index()
{
return View(_db.OgretimUyesSet.ToList());
}
public
ActionResult Create()
{
return View(); }
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude = "id")] OgretimUyes
yeniOgretimUyesiEkle)
{
if (!ModelState.IsValid)
return View();
try
{
_db.AddToOgretimUyesSet(yeniOgretimUyesiEkle);
_db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
} }
public ActionResult About()
{
return View(); }
} }
|
Daha önceki yazılarımızda Create metodunu otomatik olarak oluşturur ve
içerisinde yazılması gereken işlemleri bizler doldururduk. Fakat bu işlemi
direk bizde yapabiliriz. Yeni kayıt işleminin gerçekleşebilmesi için iki
adet create metoduna ihtiyaç vardır. Birincisi create edilecek değer
bulunamazsa geldiği view 'a döndürür. Bir diğeri ise Create işlemini
gerçekleştiren bölümdür. Dikkat edeceğiniz üzere ikinci Create metodunda
gelen verinin modele uyumluluğunu da kontrol ediyoruz. Bu durumda ilk
Validation kontrolünü gerçekleştirmiş oluyoruz. Bu kontrol esnasında
ModelState değeri negatif dönerse yeni kayıt oluştur linkine tıklanan
sayfaya geri dönecektir. Ayrıca bu durumda hataya düşüyorsanız elle ya da
otomatik olarak oluşturmuş olduğunuz HTML sayfanın Model 'den veri aldığına
emin olarak işlemlerinizi gerçekleştirebilirsiniz.
Yazımızın başında
da bahsetmiştik, model üzerinde veri kontrollerini yapmak için gerekli
işlemleri nasıl oluşturacağımızı inceliyor olacaktık. Bu aşamada ilk olarak
projeye eklemiş olduğumuz Ado.Net Entity Model 'in design tarafında otomatik
olarak oluşturulmuş olan cs koda göz atalım.

Gördüğümüz kadarı ile model içerisinde erişebildiğimiz sınıflar partial
class olarak tanımlanmaktadır. Peki, "partial class neydi?" kısaca
hatırlamak gerekirse;
Partial classların ne olduğunu kısaca
hatırlamak gerekirse; fiziksel olarak yada aynı fiziksel dosyada (amacına
göre ayrı iki .cs dosyasında olması makbul ve mantıklıdır) tanımlanan class
tanımlarının tek bir class olarak çalışması ve derlenmesidir. Yani aslında
bir sınıfın metotların farklı .cs dosyalarında tanımlayabilmeyi sağlar.
Bu durumda IDataErrorInfo ara yüzünü kullanabileceğimiz sınıfı partial
olarak oluşturup içeriğini düzenleyeceğimiz duruma getiriyoruz. Model
katmanının içerisine yeni bir sınıf ekliyoruz.
Models\OgretimUyesi.cs
using System.Collections.Generic; using System.ComponentModel;
namespace ValidationIslemler.Models {
public partial class OgretimUyesi {
} }
|
Entity Framework ile hazırlanmış olan data modelde partial sınıflar otomatik
olarak oluşturulmaktadır. Entity Framework ile oluşturulan kodlarda otomatik
olarak OnChanging ve OnChanged partial sınıfları oluşturulur.
Şimdi
bizde oluşturmuş olduğumuz sınıfın içerisine Aşağıdaki metotları ekleyelim.
•OnIdChanging
•OnIdChanged
•OnAkademisyenChanging
•OnAkademisyenChanged
•OnUnvanChanging
•OnUnvanChanged
•OnDersSaatiChanging
•OnDersSaatiChange
OnChanging metotları OnChanged metotlarını tetikleyerek çalışır ve
güncelleme işlemlerinde ID özelliklerinden yararlanarak bizim istediğimiz
değişiklikleri yapamabilmemize olanak tanır.
Şimdi yukarıdaki
bilgilerimizden yararlanarak eklemiş olduğumuz partial sınıfı biraz
düzenleyelim. Yapacak olduğumuz değişiklikler ile son kullanıcının web form
üzerinden Akademisyen ve Unvan bilgilerini boş girmemesi için gerekli olan
kod parçasını oluşturalım.
Yazımızın içerisinde daha öncede
bahsettiğimiz gibi Validation işlemlerini yaptığımız durumlarda
IDataErrorInfo ara yüzünün özelliklerinden yararlanarak çok daha işlevsel
bir hata kontrolü yapabilmemiz mümkündür.
using System.Collections.Generic; using System.ComponentModel;
namespace ValidationIslemler.Models {
public partial class OgretimUyesi:IDataErrorInfo
{ private
Dictionary<string, string> _errors = new Dictionary<string,
string>();
partial void OnAkademisyenChanging(string value)
{
if (value.Trim().Length == 0)
_errors.Add("Akademisyen", "Akademisyen bilgisi boş
geçilemez."); }
partial void
OnUnvanChanging(string value)
{
if (value.Trim().Length == 0)
_errors.Add("Unvan", "Unvan bilgisi boş geçilemez.");
} } }
|
Yapmış olduğumuz işlem sonrasında örneğin akademisyen bilgisi boş
geçildiğinden _errors Dictionary<> 'sine hata mesajı yazılacak ve kullanıcıya
gösterilecektir.
IDataErrorInfo ara yüzü ile oluşturmuş olduğumuz
sınıfı birlikte kullanmamız da gerekmektedir. Zaten OgretimUyesi sınıfına
ara yüzü eklediğimiz zaman bize otomatik olarak aşadağıki metotları
getirmektedir. Bakalım IDataErrorInfo ara yüzünün içerisinde hangi metotlar
yer almaktaymış.
public interface IDataErrorInfo {
string this[string columnName] { get; }
string Error { get; } } |
HomeController içerisinde oluşturmuş olduğumuz Crete() kontrolüne ilişkin
kontrolleri üzerinde değişiklik yaptığımız OgretimUyesi.cs üzerinde
IDataErrorInfo ara yüzünden yararlanarak Validation kontrolleri işlemlerini
gerçekleştirdik.
OgretimUyesi sınıfının içerisinde eğer Akademisyen
ve Unvan alanları boş geçilirse verilecek olan hata belirtilmiştir. Boş
geçilmesi durumunda kolon adını kontrol edecek olan IDataErrorInfo ara yüzü
olacaktır. Bu durumda ara yüze ilişkin özelliklerden error
'a istediğimiz kontrol sonucunda hata oluşursa son kullanıcının sayfasında
görüntülenmesine olanak tanırız. Ayrıca hata olması sonucunda geri dönüş
değeri olarak boş string döndürelim.
Şimdi yukarıda açıklamış
olduğumuz özelliklere göre IDataErrorInfo ara yüzü ile ilişkilendirelim ve
özelliklerine gerekli değerleri atayalım.
using System.Collections.Generic; using System.ComponentModel;
namespace ValidationIslemler.Models {
public partial class OgretimUyesi : IDataErrorInfo
{ private
Dictionary<string, string> _errors = new Dictionary<string,
string>();
partial void OnAkademisyenChanging(string value)
{
if (value.Trim().Length == 0)
_errors.Add("Akademisyen", "Akademisyen bilgisi boş
geçilemez."); }
partial void
OnUnvanChanging(string value)
{
if (value.Trim().Length == 0)
_errors.Add("Unvan", "Unvan bilgisi boş geçilemez.");
}
#region
IDataErrorInfo Members
public string Error
{
get { return string.Empty; }
}
public
string this[string columnName]
{
get
{
if (_errors.ContainsKey(columnName))
return _errors[columnName];
return string.Empty;
} }
#endregion } }
|
Artık özellikler sonrasında boş geçilen değerler _errors koleksiyonuna
eklecek ve son kullanıcı sayfasında gösterilecektir.
Bu arada
yazımız boyunca yaptığımız bütün işlemleri OgretimUyesi sınıfının içerisinde
yaptığımızı ve HomeController sınıfında hiç bir değişiklik yaptığımızı
unutmayalım.
Sonuç olarak neler yaptığımızı tekrardan bir üstünden
geçmek gerekirse, IDataErrorInfo ara yüzü yardımı ile otomatik olarak
gösterilen kontrol mesajlarını nasıl oluşturabileceğimize göz attık. Daha
sonrasında ise OnAkademisyenChanging() ve OnUnvanChanging partial
metotlarını OgretimUyesi sınıfına ekledik. Bu eklediğimiz metotlar yardımı
ile Asp.Net MVC Framework uygulamalarında kendimize özgü Validation
mesajlarını nasıl gösterebileceğimizi öğrenmiş olduk.
Umarım yararlı
olabilmiştir.
Turhal Temizer
info@turhaltemizer.com
http://turhal.blogspot.com
Turhal Temizer
Turhal Temizer İstanbul doğumludur. Karadeniz Teknik Üniversitesi İstatistik ve Bilgisayar Bilimleri mezunu olan Temizer Türkiye Bilişim Derneği Genç Trabzon Temsilciği görevinde bulunmuştur. 2003 yılından bu yana .NET ve yazılım ile ilgilenmektedir. S2B eğitimi sonucunda ASP.NET ve AJAX sertifikası bulunmaktadır. Microsoft Tek. beta testerliği yapmaktadır. .Net dilinin dışında Java ile de profesyonel uygulamalar geliştirmektedir. Genellikle Windows ve Mobile uygulamalar üzerinde çalışmaktadır. Şu anda özel bir yazılım şirketinde proje yöneticisi olarak iş yaşamını sürdürmektedir. Blog: http://turhal.blogspot.com
|